2016-05-31 5 views
0

link-in-django-admin-to-foreign-key-objectで説明したように、ForeignKeyフィールドを管理者の詳細ページへのリンクとして表示できます。要約する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が変更リストを生成する方法を見てください。

私はまた、あなたがlink_to_bar.allow_tags = Trueが不要になり、リンクを、レンダリングするためにformat_htmlを使用することをお勧めします:

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 
関連する問題