将ForeignKey记录链接到Django Admin中的详细视图?

时间:2016-05-14 12:33:13

标签: python django

如果有两个型号

models.py

class ModelA(models.Model):
    pass

class ModelB(models.Model):
    a = models.ForeignKey(ModelA, null=True)

admin.py

class ModelBAdmin(admin.ModelAdmin):
    list_display = ('id', 'a', )
    list_display_links = None
    ordering = ('-id', )

admin.site.register(ModelB, ModelBAdmin)


class ModelAAdmin(admin.ModelAdmin):
    list_display = ('id', )
    list_display_links = None

admin.site.register(ModelA, ModelAAdmin)

有没有办法在a的列表视图中将ModelB与其详细信息视图相关联?如果没有,那么我们可以在ModelB的详细视图中做同样的事情吗?也就是说,将a显示为其详细视图的链接?

目前在ModelB的列表视图中,id只有ModelA。要查看其详细信息,我必须转到ModelA列表视图并搜索ID。我希望在id的列表视图中ModelB指向a的详细视图(例如/admin/ModelA/{a.id})

1 个答案:

答案 0 :(得分:2)

列表视图中的字段可以是callables,因此您可以这样做:

from django.core.urlresolvers import reverse

class ModelBAdmin(admin.ModelAdmin):
    list_display = ('id', 'a_link', )
    list_display_links = None
    ordering = ('-id', )

    def a_link(obj):
        return format_html('<a href="{}">{}</a>', reverse(
            'admin:myapp_a_change', args=[obj.a.id]), obj.a.name)
    a_link.short_description = "Model A Details"

admin.site.register(ModelB, ModelBAdmin)