2013-04-20 6 views
10

django管理者のモデルリストページに表示されている列を動的に変更しようとしましたが、私のModelAdminクラスの__init__()メソッドをオーバーライドして、権限に応じてlist_display属性から特定のフィールドを動的に追加または削除しました現在のユーザーのしかし、ModelAdminクラスは、再起動するたびに一度だけインスタンス化されることがわかりました。django ModelAdminクラスの "list_display"属性をどのように動的に指定できますか?

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

答えて

16

この質問をしている間、私は答えに出くわしたので、私は私が共有したいと思ったが...

チケット#14206は、この機能はいくつかの時間前に(バージョン1.4、私は信じて)をDjangoのために追加されたことを示しています。 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 
関連する問題