2010-09-05 86 views

回答

2

设置fields一个的hackish办法做到这一点是覆盖list_display变量每次修改列表视图称为:

class MyModelAdmin(admin.ModelAdmin) 
    def changelist_view(self, request, extra_context=None): 
     user = request.user 
     if user.is_superuser: 
      self.list_display = ['field1', 'field2'] 
     else: 
      self.list_display = ['field1'] 
     return super(MyModelAdmin, self).changelist_view(request, extra_context=None) 

但设置每次都变为期望的值,因为同样的管理实例也可能被其他用户的请求调用!

+0

做出对不起我的问题是错误的,我真正的意思'fields'而不是'list_display',但你的建议仍然适用 – zer0stimulus 2010-09-05 19:07:57

1

改变编辑窗体的一个有趣的方法是只改变只读字段列表。

为此只覆盖功能get_readonly_fields

class MyModelAdmin(admin.ModelAdmin): 
    def get_readonly_fields(self, request, obj=None): 
     user = request.user 
     if user.is_superuser: 
      readonly = [] 
     else: 
      readonly = ['field1'] 
     return readonly 

关于list_display现代的方法来修改它是重新定义get_list_display

原来的定义只是返回self.list_display

class ModelAdmin: 
    def get_list_display(self, request): 
     """ 
     Return a sequence containing the fields to be displayed on the 
     changelist. 
     """ 
     return self.list_display 

,这样可以提供:

class MyModelAdmin(admin.ModelAdmin): 
    def get_list_display(self, request): 
     user = request.user 
     if user.is_superuser: 
      list_display = ['field1', 'field2'] 
     else: 
      list_display = ['field1'] 
     return list_display 
相关问题