1

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 に指示する必要があるのはどこでしょうか?

4

0 に答える 0