Django では、リスト ビューに必要なフィールドのほとんどが外部キーを介してリンクされています。
class MyUserAdmin(admin.ModelAdmin):
list_display = ('first_name', 'last_name', 'email', )
def first_name(self, obj):
return obj.dragonuser.first_name
def last_name(self, obj):
return obj.dragonuser.last_name
def email(self, obj):
return obj.dragonuser.email
first_name.short_description = 'First name'
last_name.short_description = 'Last name'
email.short_description = 'Email address'
これは機能しますが、Django はデータベースからこれらのフィールドをまったく取得していないため、それらを並べ替えたり、フィルタリングに使用したりすることはできません。良くないね。そのため、データベースに直接ビューを作成しました。インスタンスの作成や編集には使用したくありません。そのためのカスタムフォームがあります。そのカスタム テーブルをリスト要素のみに使用したいと思います。しかし、そのコードをどこに追加すればよいかわかりません。管理者定義で?マネージャーで?他の場所?
マネージャーでカスタム メソッドを作成することはできますが、その特定の関数を呼び出すように管理ビューに指示するにはどうすればよいでしょうか?
admin でメソッドchangelist_view
が呼び出されるまでに、データベースへの呼び出しは既に行われています (渡された引数を調べてわかったことに基づいています)。
def changelist_view(self, request, extra_context=None):
from pprint import pprint
pprint(dir(request))
return super(BaseUserAdmin, self).changelist_view(request, extra_context)
では、リスト操作のみに別のデータベース テーブル (実際にはビュー) を使用するように Django に指示する必要があるのはどこでしょうか?