假设我有以下具有多对多关系的模型:
www.example.commodels.py:
class Foo(models.Model):
name = models.TextField()
class Bar(models.Model):
name = models.TextField()
foos = models.ManyToManyField(Foo, related_name='bars')
然后在admin中按以下方式定义它们:
www.example.comadmin.py
@admin.register(Foo)
class FooAdmin(admin.ModelAdmin):
pass
@admin.register(Bar)
class BarAdmin(admin.ModelAdmin):
pass
在Django管理中,当浏览Bar
示例时,我可以看到Bar
关联的Foo
示例,并可以在那里修改它们。
然而,Foo
就没有这样的运气了,我看不到每个Foo对象都关联的Bar
示例。
Django可以定义自动处理吗?还是我需要自己来处理?
我使用的是Python 3.6.1和Django 1.11。
4条答案
按热度按时间kxeu7u2r1#
您可以定义一个定制的
InlineModelAdmin
,如下所示:并在
FooAdmin
中使用它:请看一下django文档的这一部分。
sxpgvts32#
您可以为
list_display
定义自定义字段,如下所示:这是一个非常简单的例子,但我希望它能作为一个起点对您有所帮助。
编辑:
您可以将编辑表单中的关联对象显示为只读:
m2xkgtsf3#
有一个叫django-admin-extend的模块,它提供了一个通用的机制来定义“双向多对多字段”。我不确定它是否仍然工作,因为最后的贡献是两年前的,位应该值得一试。
8gsdolmq4#
下面的代码可以在Django Admin的同一个页面上显示多对多关系中的
Foo
和Bar
模型:如果在多对多关系中使用
model = Bar
而不是model = Bar.foos.through
,请小心,如下所示:您将看到以下错误:
错误:〈类“xxx.管理员条内联”〉:(admin.E202)“xxx.Bar”没有指向“xxx. Foo”的外键。