m2m关系不显示或保存在django
class A(Model):
to_b = ManyToManyField('B', blank=True, through='AtoB')
class B(Model):
to_a = ManyToManyField('A', blank=True, through='AtoB')
class AtoB(Model):
a = ForeignKey('A', on_delete=CASCADE)
b = ForeignKey('B', on_delete=CASCADE)
usr = ForeignKey(settings.USER, on_delete=CASCADE)
# some other fields
我做了一个django应用程序。
这大致相当于我在我的models.py
我需要m2m关系之间的A和B去通过另一个模型,因为我需要在那里存储额外的数据。
现在有一个问题 - 当我尝试在我的自定义视图中保存模型A的实例时,无论我是否选择它们,都不保存与B B的关系。 当我去http://127.0.0.1:8000/admin,并尝试从那里创建A的实例,我甚至没有看到适当的领域(应该是<select multiple>
我猜)选择关系与B。
有人可以解释我为什么关系没有保存,甚至没有显示在/管理?
这里是代码大致相当于什么,我有views.py:m2m关系不显示或保存在django
class Create(CreateView):
model = None # A or B
template_name = 'something.html'
def form_valid(self, form):
self.object = form.save(commit=False)
form.save()
return HttpResponseRedirect(self.get_success_url())
在urls.py我指定的其他参数如下: views.Create.as_view(model=models.A, fields=['to_b'])
这是行不通的。如果您使用自己的ManytoMany中介表,则必须手动管理并自行保存对象。使用Django的内置函数将不起作用。
保存Object A
,然后保存Object B
,然后将关系保存在您的AtoB
表(也是一个对象)中。
a_to_b = AtoB.objects.create(a=object_a, b=object_b, user=self.request.user)
print(a_to_b)
[...]请注意,如果您使用的是中间 模型的许多一对多的关系,一些相关的经理 方法是禁用的,所以其中的一些例子荣获” t与这样的 模型一起工作。
https://docs.djangoproject.com/en/1.10/topics/db/examples/many_to_many/
你的错误在这里解释:https://docs.djangoproject.com/en/1.10/topics/db/models/#intermediary-manytomany
谢谢。 在这种情况下制作m2m字段有什么意义吗? 我的意思是'to_a'和'to_b'字段可以简单地是'ForeignKey'到AtoB模型。 – Rob
我会使用ManyToMany关系,以防我需要两个类之间的连接,而这两个类之间需要与'n' ObjectsB'AND'相关的ObjectA,反之亦然。从某种意义上说,ManyToMany关系只是另一个表的ForeinKey,但Django提供的抽象级别更高,管理这些对象的速度更快,而且不那么痛苦。例如,您可以用object_a.to_b_set.add(* QuerySet [])'批量添加对象'。我还会在这些字段中添加一个'related_name'以使其更容易。 https://docs.djangoproject.com/en/1.10/ref/models/relations/#django.db.models.fields.related.RelatedManager.add –
在您尝试创建这种关系请分享一段代码。 –
完成,请参阅 – Rob