Django admin list_display_links to foreign key

时间:2017-03-15 09:40:13

标签: django django-admin

我正在使用Django 1.10。在admin中有一个选项可以设置外键上的链接,这样当单击它时,页面将被重定向到外键对象。

Admin screen

在上面的图像中,StyleID是一个外键。我希望Django管理员带我到Style表中的相应对象。

2 个答案:

答案 0 :(得分:13)

list_display_links选项可让您选择链接到当前实例的字段。没有选项可以使这些链接指向相关实例。

您可以在模型管理类上创建一个呈现链接的方法,然后在list_display选项中包含方法名称。

请参阅Django文档:Reversing admin URLs

from django.contrib import admin
from django.utils.html import format_html

from django.urls import reverse
# Old import:
# from django.core.urlresolvers import reverse

class MyModelAdmin(admin.modelAdmin):
    def style_link(self, obj):
        url = reverse('admin:myapp_style_change', obj.style_id)
        return format_html("<a href='{}'>{}</a>", url, obj.style_id)
    style_link.admin_order_field = 'style'
    style_link.short_description = 'style'

    list_display = ['widget', 'style_link', ...]

admin_order_fieldshort_description属性不是必需的,但可以改进功能。有关它们的更多信息,请参阅文档。

答案 1 :(得分:1)

如果您使用的是python3并想做同样的事情,这是对上述内容的一些修改:

url = reverse('admin:myapp_style_change', args = [obj.style.id])
return format_html("<a href='{}'>{}</a>", url, obj.style.id)
  

您可以使用要显示的模型的任何字段来代替 obj.style.id 。例如,返回format_html(“ {}”,网址, obj.style.name