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,然后在AtoBtable(也是一个对象)中保存关系。

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