Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
多对多关系的Django管理表单_Django_Django Models_Django Admin - Fatal编程技术网

多对多关系的Django管理表单

多对多关系的Django管理表单,django,django-models,django-admin,Django,Django Models,Django Admin,我在两个表、用户和域之间存在多对多关系。 我已经在Domains类中定义了这种关系。 因此,在管理界面中,我在查看域时可以看到用户。 但我在查看用户时看不到域。 我怎样才能做到这一点。我想您需要的是。唯一的内置方式是通过InlineModelAdmin,但您可以使用自定义ModelForm和用户ModelAdmin来创建用于此目的的字段。有关简化的设置,请参见下面的代码(假设users=ManyToManyField(related_name='domains')) 我知道这是一个较老的线程,但

我在两个表、用户和域之间存在多对多关系。 我已经在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)