在 Django admin 中显示子级内联

2024-01-07

在 Django 1.11 中,我有 2 个模型,Foo and Bar:

class Foo(models.Model):
    name = models.CharField()

class Bar(models.Model):
    name = models.CharField()
    foo = models.ForeignKey(Foo)

当我访问 Django 管理中的 Foo 页面时,我希望能够看到其下方的 Bars 列表。所以我这样做admin.py:

class BarInline(admin.StackedInline):
    model = Bar

@admin.register(Foo)
class FooAdmin(admin.ModelAdmin):
    list_display = ('name')
    fields = ('name')
    inlines = [BarInline]

但我真正想要的是一个指向单独页面的可点击链接列表,我可以在其中编辑每个 Bar(以及用于向此 Foo 添加新 Bar 的“添加”按钮)。 IE。我不想要整个内联表单。这在 Django 中怎么可能呢?


admin.py

from django.urls import reverse
from django.utils.html import format_html_join

@admin.register(Foo)
class FooAdmin(admin.ModelAdmin):
    list_display = ('name')
    fields = ('name', get_related, )
    readonly_fields = (get_related, )

    def get_related(self, instance):
        obj = instance.bar_set.all()
        return format_html_join(
            ',',
            '<a href="{}">{}</a>',
            ((
                reverse('admin:{{ app_label }}_bar_change', args=(c.id,)), 
                c.name
            ) for c in obj),
        )

您可以创建一个可调用的只读字段 https://docs.djangoproject.com/en/dev/ref/contrib/admin/#django.contrib.admin.ModelAdmin.readonly_fields这将返回相反的管理网址 https://docs.djangoproject.com/en/dev/ref/contrib/admin/#reversing-admin-urls每个关系包含在相关的html代码 https://docs.djangoproject.com/en/dev/ref/utils/#django.utils.html.format_html_join.

这将导致类似的结果:

“您的只读字段”:link1、link2、link3

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Django admin 中显示子级内联 的相关文章

随机推荐