2013-05-22 93 views
2

爲了簡單起見,我們說,我有模型產品和模型參數。默認情況下,模型產品我想這些設置:Django管理:不同的(條件)列表參數如果彈出(raw_id_fields,list_display,list_filter)

class ProductAdmin(ModelAdmin): 
    list_display = ('name', 'brand', 'sort', 'specific', 'link_to_frontend', 'category_names', 'ean', 'created', 'creator') 
    list_filter = ('category', 'creator') 
    search_fields = ('name', 'brand__name', 'sort', 'specific', 'category__name', 'ean') 

參數添加/編輯,我已經加入產品作爲raw_id_fields。由於我在默認產品列表中有很多列,我想要做不同的設置,如果彈出:

class ProductAdmin(ModelAdmin): 
    list_display = ('name', 'brand', 'sort', 'specific', 'category_names') 
    list_filter =() 
    search_fields = ('name', 'brand__name', 'sort', 'specific', 'category__name') 

任何幫助讚賞。

回答

3

最後,找到了解決辦法。我已經創建了一個通用自己的ModelAdmin類,在通用的應用程序的admin.py文件:

from django.contrib import admin 
from django.contrib.admin.views.main import IS_POPUP_VAR 

class YourModelAdmin(admin.ModelAdmin): 
    popup_list_display =() 
    popup_list_filter =() 

    def get_list_display(self, request): 
     if IS_POPUP_VAR in request.GET and self.popup_list_display: # return list_display if not set 
      return self.popup_list_display 
     else: 
      return self.list_display 

    def get_list_filter(self, request): 
     if IS_POPUP_VAR in request.GET: # return empty tuple if not set 
      return self.popup_list_filter 
     else: 
      return self.list_filter 

而且從應用程序的管理員,我打電話:

from django.contrib import admin 
from [your-uni-app].admin import YourModelAdmin # not necessary if in same file 

class ProductAdmin(YourModelAdmin): # e.g. 
    list_display = ('name', 'category', 'properties',) 
    popup_list_display = ('name', 'category',) 
    # same settings for list_filter and popup_list_filter 

admin.register(Product, ProductAdmin) 

這種解決方案也是開放的條件list_display基於一些用戶角色(例如)或在返回之前使用list_display進行操作(將任何列自動添加到所有列表)。如果被覆蓋,對於list_filter和django.contrib.admin.ModelAdmin(或BaseModelAdmin)中的任何函數都是相同的。

覆蓋search_fields意味着創建覆蓋django.contrib.admin.ModelAdmin.chagnelist_view函數。對我來說,它變得沒有必要,因爲我需要在普通和彈出視圖中進行相同的搜索。然而,只有負面的沒有覆蓋能力是,你可以通過不可見的領域進行搜索,這似乎不是那麼大的問題...

希望這對任何人都有幫助。

相關問題