1. ホーム
  2. パイソン

[解決済み】Django ModelAdmin の "list_display" は ForeignKey フィールドの属性を表示することができますか?

2022-03-25 21:45:35

質問

私は Person と外部キー関係を持つモデルです。 Book には多くのフィールドがありますが、私が最も気にしているのは author (標準的な CharField) を使用します。

とはいえ、私の PersonAdmin を表示させたいと思います。 book.author を使って list_display :

class PersonAdmin(admin.ModelAdmin):
    list_display = ['book.author',]

そのための明白な方法をすべて試しましたが、何もうまくいかないようです。

何かご提案があればお願いします。

解決方法は?

別の方法として、次のようなルックアップを行うこともできます。

class UserAdmin(admin.ModelAdmin):
    list_display = (..., 'get_author')
    
    def get_author(self, obj):
        return obj.book.author
    get_author.short_description = 'Author'
    get_author.admin_order_field = 'book__author'

Django 3.2以降では、以下のように使うことができます。 display() デコレータを使用します。

class UserAdmin(admin.ModelAdmin):
    list_display = (..., 'get_author')
    
    @display(ordering='book__author', description='Author')
    def get_author(self, obj):
        return obj.book.author