Nob*_*lis 3 python django django-models django-admin
假设我有以下具有多对多关系的模型:
class Foo(models.Model):
name = models.TextField()
class Bar(models.Model):
name = models.TextField()
foos = models.ManyToManyField(Foo, related_name='bars')
Run Code Online (Sandbox Code Playgroud)
然后以以下方式在admin中定义它们:
@admin.register(Foo)
class FooAdmin(admin.ModelAdmin):
"""Foo admin."""
list_display = ('name',)
search_fields = ('name',)
@admin.register(Bar)
class BarAdmin(admin.ModelAdmin):
"""Bar admin."""
list_display = ('name',)
search_fields = ('name',)
Run Code Online (Sandbox Code Playgroud)
在Django admin中,浏览Bar实例时,我可以看到Foo实例Bar与之关联,并可以从那里修改它们。
但是,没有这样的运气Foo,我看不到Bar每个Foo对象都与之关联的实例。
Django可以为此定义自动处理吗,还是我需要滚动自己的方法?
我正在使用Python 3.6.1和Django 1.11。
小智 6
您可以这样定义一个自定义InlineModelAdmin:
class BarInline(admin.TabularInline):
model = Bar.foos.through
Run Code Online (Sandbox Code Playgroud)
并将其用于您的FooAdmin:
class FooAdmin(admin.ModelAdmin):
"""Foo admin."""
model = Foo
inlines = [
BarInline,
]
Run Code Online (Sandbox Code Playgroud)
看看django 文档的这一部分。
您可以像这样定义自定义字段list_display:
@admin.register(Foo)
class FooAdmin(admin.ModelAdmin):
"""Foo admin."""
list_display = ('name', 'get_bars')
search_fields = ('name',)
def get_bars(self, obj):
return obj.bars.all()
Run Code Online (Sandbox Code Playgroud)
这是一个非常简单的示例,但我希望它可以作为起点对您有所帮助。
编辑:
您可以将编辑表单中的关联对象显示为只读:
readonly_fields = ('get_bars',)
fields = ('name', 'get_bars')
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1767 次 |
| 最近记录: |