多对多关系的Django管理表单
我在两个表、用户和域之间存在多对多关系。 我已经在Domains类中定义了这种关系。 因此,在管理界面中,我在查看域时可以看到用户。 但我在查看用户时看不到域。多对多关系的Django管理表单,django,django-models,django-admin,Django,Django Models,Django Admin,我在两个表、用户和域之间存在多对多关系。 我已经在Domains类中定义了这种关系。 因此,在管理界面中,我在查看域时可以看到用户。 但我在查看用户时看不到域。 我怎样才能做到这一点。我想您需要的是。唯一的内置方式是通过InlineModelAdmin,但您可以使用自定义ModelForm和用户ModelAdmin来创建用于此目的的字段。有关简化的设置,请参见下面的代码(假设users=ManyToManyField(related_name='domains')) 我知道这是一个较老的线程,但
我怎样才能做到这一点。我想您需要的是。唯一的内置方式是通过InlineModelAdmin,但您可以使用自定义ModelForm和用户ModelAdmin来创建用于此目的的字段。有关简化的设置,请参见下面的代码(假设
users=ManyToManyField(related_name='domains')
)
我知道这是一个较老的线程,但这是谷歌上出现的第一个结果,我认为有必要给出更好的答案 Via我找到了让您的ManyToManyField在两款车型上都出现的最佳方式:
class Test1(models.Model):
tests2 = models.ManyToManyField('Test2', blank=True)
class Test2(models.Model):
tests1 = models.ManyToManyField(Test1, through=Test1.tests2.through, blank=True)
我自己也测试过,对结果非常满意。对于仍然遇到这种情况的人,可能值得检查一下
它提供了一种机制,用于在ModelAdmins中注入已由其他应用程序定义的双向多对多字段。可能不是OP所希望的(一种从关系两侧使用常规多对多过滤器选择器的方法),但这也是我将使用的解决方案。我如何引用关系表(在我的例子中是Domains\u User)我没有一个显式的中间表。在这种情况下,我如何将InlineModelAdmin用于manytomanyRelationship这在添加“User”(在我的例子中不是
用户
)时对我不太起作用。我需要在\uuu init\uu
方法中检查self.instance.id
,我需要保存()
在为新对象分配域之前先将其删除。我收到错误消息“Test2”未定义,这似乎是合乎逻辑的,因为调用Test2时未定义Test2。您的解决方案将非常出色,如果工作正常,这就是他在Test2中添加引号的原因,如果您在“Test2”中添加引号,则可以工作
class Test1(models.Model):
tests2 = models.ManyToManyField('Test2', blank=True)
class Test2(models.Model):
tests1 = models.ManyToManyField(Test1, through=Test1.tests2.through, blank=True)