2014-02-08 4 views
0

Я хочу настраивать list_display с помощью разных разрешений. Например, супер мог видеть «цену», другие - нет. admin.pyDjango admin custom list_display

class bookAdmin(admin.ModelAdmin): 
    def display_resort(request): 
     if request.user.is_super: 
      resort_list = ["name", "author", "price"] 
     else: 
      resort_list = ["name", "author"] 
     return resort_list 
    list_display = ['display_resort'] 

Но я получил

display_resort() takes exactly 1 argument (2 given) 

Я думаю, что возвращение материал не в правильном методе, я также попробовать возвращение «resort_list» в кортеже, итерации и строки и т.д. Но все провалилось. Проще говоря, я хочу, чтобы весь список list_display настраивался не только по одному полю. Ищет вашу помощь, Спасибо.

--- С помощью freylis, мой коды сейчас:

class bookAdmin(admin.ModelAdmin): 
    def get_list_display(self, request): 
     default_list_display = super(bookAdmin, self).get_list_display(request) 
     if request.user.is_super: 
      default_list_display = ["name", "author", "price"] 
     else: 
      default_list_display = ["name", "author"] 
     return default_list_display 

Вот документ get_list_display https://docs.djangoproject.com/en/1.4/ref/contrib/admin/#django.contrib.admin.ModelAdmin.get_list_display, но не очень подробно.

ответ

1

В первом, все методы класса принимает первый аргумент self, поэтому вам нужно определить вам метод, как:

def display_resort(self, request): 
    if request.user.is_super: 
     resort_list = ["name", "author", "price"] 
    else: 
     resort_list = ["name", "author"] 
    return resort_list 

Но разве в Джанго-полосная. Вам нужно определить get_list_display метод в bookAdmin классе:

class bookAdmin(admin.ModelAdmin): 

    def get_list_display(self, request): 
     default_list_display = super(bookAdmin, self).get_list_display(request) 
     if request.user.is_superuser: 
      # return any list 
     return default_list_display 
+0

Он работает, спасибо. В разделе «If» я добавляю «else», который не соответствует условию, будет отображать только поле fist на странице change_list. – JerryLong

Смежные вопросы