更改列表链接到外键更改页面

Ada*_*dam 15 django django-models django-admin

查看模型的管理员更改列表时,是否可以使与外键对应的列链接到其各自的页面?一个简单的例子是我有一个包含Bar作为外键的Foo对象.如果我正在查看Foo的管理员更改列表(并将其设置为在display_list列中包含Bar),则主列将链接到Foo实例的编辑页面,而Bar列将链接到Boo实例的编辑页面.我知道我可以覆盖使用的模板,但我很好奇是否有一个不需要的解决方案.

Dan*_*man 21

您可以定义要在changelist中使用的自定义方法,该方法返回链接的HTML.

from django.core.urlresolvers import reverse

class MyFooAdmin(admin.ModelAdmin):
    list_display = ('foo', 'bar_link')

    def bar_link(self, obj):
        url = reverse('admin:myapp_bar_change', args=(obj.pk,))
        return '<a href="%s">Edit Bar</a>' % url 
    bar_link.allow_tags = True 
Run Code Online (Sandbox Code Playgroud)

你提出的问题有一个问题 - 如果Foo有一个Bar的外键,那么每个foo链接到一个单独的栏,所以你可以链接到该栏的编辑页面.但是,每个栏都链接到多个foos,因此要求链接到"Foo实例的编辑页面"没有意义.您可以做的是链接到Foo的更改列表页面,并将过滤器设置为仅显示链接到此栏的实例:

    def foo_link(self, obj):
        url = reverse('admin:myapp_foo_changelist')
        return '<a href="%s?bar=%s">See Foos</a>' % (url, obj.pk) 
    foo_link.allow_tags = True 
Run Code Online (Sandbox Code Playgroud)

  • 1.4或1.5中的任何更新(我的意思是这看起来像Django本身的一个很好的补充,所以也许它已经添加到`contrib.admin`)? (2认同)