2013-05-22 62 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函数。对我来说,它变得没有必要,因为我需要在普通和弹出视图中进行相同的搜索。然而,只有负面的没有覆盖能力是,你可以通过不可见的领域进行搜索,这似乎不是那么大的问题...

希望这对任何人都有帮助。

相关问题