我试图根据选择的过滤器显示不同的列(在list_display中)。
这是我的代码:
# Filter:
class FilterNameFilter(admin.SimpleListFilter):
title = ('FilterName')
parameter_name = 'FilterName'
def lookups(self, request, model_admin):
return (
('xxx', _('xxx 1')),
('yyy', _('yyy 2')),
)
def queryset(self, request, queryset):
if self.value() == 'xxx':
return queryset.filter(c__isnull=False)
if self.value() == 'yyy':
return queryset.filter(d__isnull=False)
# Model:
class pricelist_admin(ModelAdmin):
...
list_display = ('EAN_id', 'Vendor', 'Description', 'DynamicColumn', 'a', 'b', 'c', 'd', 'e')
list_filter = ('Vandor_id__Name', FilterNameFilter)
search_fields = ('EAN_id__Description', 'EAN_id__EAN')
#Dynamic column:
def DynamicColumn(self, obj):
if # ... Here is my code for showing different columns,
# it works fine for other loop's examples, but I don't know
# how to integrate it with "FilterNameFilter" to return desired columns:
return obj.e
else:
return obj.EAN.Description
有什么想法吗?帮助将不胜感激!
答案 0 :(得分:0)
作为解决方法,我创建了代理模型:
class SomeClass(pricelist):
class Meta:
proxy = True
具有单独的ModelAdmin,可以在其中处理我的列:
class pricelist2_admin(ModelAdmin):
...
list_display = ('EAN_id', 'Vendor', 'Description', 'd', 'c', 'b', 'a')
list_filter = ('Vandor_id__Name', FilterNameFilter)
search_fields = ('EAN_id__Description', 'EAN_id__EAN')
所以我想现在就可以了...