django admin のモデル リスト ページに表示される列を動的に変更しよう__init__()
として、ModelAdmin クラスのメソッドをオーバーライドして、現在の権限に応じて list_display 属性から特定のフィールドを動的に追加または削除しようとしました。ユーザー。ただし、ModelAdmin クラスは再起動ごとに 1 回しかインスタンス化されないため、機能しないことがわかりました...
list_display フィールドを動的に変更する別の方法はありますか?
django admin のモデル リスト ページに表示される列を動的に変更しよう__init__()
として、ModelAdmin クラスのメソッドをオーバーライドして、現在の権限に応じて list_display 属性から特定のフィールドを動的に追加または削除しようとしました。ユーザー。ただし、ModelAdmin クラスは再起動ごとに 1 回しかインスタンス化されないため、機能しないことがわかりました...
list_display フィールドを動的に変更する別の方法はありますか?
この質問をしているときに、答えに出くわしたので、共有したいと思いました...
チケット#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