m2m 关系不显示或保存在 django 中
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 的实例时,我什至看不到用于选择关系的适当字段(我猜应该是 <select multiple>
) B.
谁能解释一下为什么关系没有保存,甚至没有显示在 /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 中介 table,您必须自己手动管理和保存对象。使用 Django 的内置函数将不起作用。
保存Object A
,然后保存Object B
,然后在AtoB
table(也是一个对象)中保存关系。
a_to_b = AtoB.objects.create(a=object_a, b=object_b, user=self.request.user)
print(a_to_b)
[...] Note that if you are using an intermediate
model for a many-to-many relationship, some of the related manager’s
methods are disabled, so some of these examples won’t work with such
models.
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
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 的实例时,我什至看不到用于选择关系的适当字段(我猜应该是 <select multiple>
) B.
谁能解释一下为什么关系没有保存,甚至没有显示在 /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 中介 table,您必须自己手动管理和保存对象。使用 Django 的内置函数将不起作用。
保存Object A
,然后保存Object B
,然后在AtoB
table(也是一个对象)中保存关系。
a_to_b = AtoB.objects.create(a=object_a, b=object_b, user=self.request.user)
print(a_to_b)
[...] Note that if you are using an intermediate model for a many-to-many relationship, some of the related manager’s methods are disabled, so some of these examples won’t work with such models.
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