在 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(使用前将#替换为@)