13

django admin のモデル リスト ページに表示される列を動的に変更しよう__init__()として、ModelAdmin クラスのメソッドをオーバーライドして、現在の権限に応じて list_display 属性から特定のフィールドを動的に追加または削除しようとしました。ユーザー。ただし、ModelAdmin クラスは再起動ごとに 1 回しかインスタンス化されないため、機能しないことがわかりました...

list_display フィールドを動的に変更する別の方法はありますか?

4

1 に答える 1

25

この質問をしているときに、答えに出くわしたので、共有したいと思いました...

チケット#14206は、この機能が少し前に django に追加されたことを示しています (バージョン 1.4 だと思います)。ModelAdmin クラスが get_list_display() メソッドをサポートするようになりました:

def get_list_display(self, request):
    if request.user.has_perm('my_app.my_permission'):
        list_display = ('field_1', 'field_2', 'dynamic_field',)
    else:
        list_display = ('field_1', 'field_2',)
    return list_display
于 2013-04-20T00:05:09.890 に答える