m2m关系不显示或保存在django

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'])

+0

在您尝试创建这种关系请分享一段代码。 –

+0

完成,请参阅 – Rob

这是行不通的。如果您使用自己的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

+1

谢谢。 在这种情况下制作m2m字段有什么意义吗? 我的意思是'to_a'和'to_b'字段可以简单地是'ForeignKey'到AtoB模型。 – Rob

+0

我会使用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 –