2016-05-31 41 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 
相關問題