2016-05-31 54 views
0

link-in-django-admin-to-foreign-key-object中所述,可以显示外键字段作为到管理详细信息页面的链接。将外键列显示为链接到Django中的详细对象admin

总之,

class Foo(Model): 
    bar = models.ForeignKey(Bar) 

class FooAdmin(ModelAdmin): 
    list_display = ('link_to_bar',) 
    def link_to_bar(self, obj): 
     link = urlresolvers.reverse('admin:app_bar_change', args=[obj.bar_id]) 
     return u'<a href="%s">%s</a>' % (link, obj.bar) if obj.bar else None 
    link_to_bar.allow_tags = True 

的问题是:我们可以更自动地做到这一点?例如,提供给FooAdmin定义外键的列表中显示为链接到详细信息页面:

class FooAdmin(ModelAdmin): 
    ... 
    list_foreign_key_links = ('bar',) 
    ... 

我知道这些ModelAdmin类与元类编程生成。那么,它应该是可能的。这将是一个好的开始?

回答

0

一个好的开始将会看到BaseModelAdminModelAdmin的来源。试着找出ModelAdmin如何生成默认链接。 扩展ModelAdmin,添加一个方法来生成指向任意外键的链接,并查看ChangeList如何生成更改列表。

我也建议你使用format_html渲染的联系,这使得link_to_bar.allow_tags = True不必要的:

from django.utils.html import format_html 

class FooAdmin(ModelAdmin): 
    list_display = ('link_to_bar',) 
    def link_to_bar(self, obj): 
     link = urlresolvers.reverse('admin:app_bar_change', args=[obj.bar_id]) 
     return format_html('<a href="{}">{}</a>', link, obj.bar) if obj.bar else None 
相关问题