[英]m2m relations are not displayed or saved in 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中拥有的东西
我需要A和B之间的m2m关系才能通过另一个模型,因为我需要在那里存储其他数据。
现在有一个问题-当我尝试在自定义视图中保存模型A的实例时,无论是否选择它们,都不会保存与B实例的关系。 当我转到http://127.0.0.1:8000/admin并尝试从那里创建A的实例时,我什至看不到用于选择与B的关系的正确字段(应该是<select multiple>
)。
有人可以解释一下为什么为什么不保存关系,甚至不在/ admin中显示关系吗?
这是大致相当于我在views.py中的代码:
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)
[...]请注意,如果您对多对多关系使用中间模型,则会禁用某些相关管理器的方法,因此其中一些示例不适用于此类模型。
https://docs.djangoproject.com/en/1.10/topics/db/examples/many_to_many/
您的错误在此处进行了说明: https : //docs.djangoproject.com/zh/1.10/topics/db/models/#intermediary-manytomany
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.