在Django管理中显示多人关系的双方

2024-04-19 14:19:56 发布

您现在位置:Python中文网/ 问答频道 /正文

假设我有以下多对多关系模型:

在模型.py公司名称:

class Foo(models.Model):

    name = models.TextField()


class Bar(models.Model):

    name = models.TextField()
    foos = models.ManyToManyField(Foo, related_name='bars')

然后在admin中按以下方式定义它们:

在管理员py在

^{pr2}$

在Django-admin中,当浏览Bar实例时,我可以看到Foo实例Bar与之关联,并可以从那里修改它们。在

然而,{cd1}与Foo{1}没有关联的实例。在

Django可以为此定义自动处理吗?或者我需要使用自己的方法吗?在

我使用的是python3.6.1和django1.11。在


Tags: django实例namepy模型model定义foo
3条回答

您可以如下定义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()

这是一个非常简单的例子,但我希望它可以帮助你作为一个起点。在

编辑:

可以将编辑窗体中的关联对象显示为只读:

^{pr2}$

您可以定义一个自定义InlineModelAdmin,如下所示:

class BarInline(admin.TabularInline):
    model = Bar.foos.through

并在您的FooAdmin中使用它:

^{pr2}$

请看一下djangodocumentation的这一部分。在

有一个名为django-admin-extend的模块,它提供了一个通用机制来定义“双向多对多字段”。我不确定它是否仍然有效,因为最后一个贡献是两年前的,它应该值得一试。在

相关问题 更多 >