默认情况下,django admin的 list_filter
提供模型选择中可用的所有过滤器 . 但除了那些我想再多一个过滤器,让我们说'None'过滤器 .
class Mymodel:
char choice field (choices=(('1', 'txt1', '2', 'txt2')), null=True)
class MymodelAdmin(admin.ModelAdmin):
...
list_filter = [..., choice_field, ...]
...
这将在管理面板(右侧过滤器)中设置三个过滤器, All, 'txt1', 'txt2'
. 对?如果没有从选项中分配值,我还需要一个过滤器'None' .
到目前为止我尝试了什么..
class ChoiceFieldFilter(admin.filters.ChoicesFieldListFilter):
def __init__(self, *args, **kwargs):
super(ChoiceFieldFilter, self).__init__(*args, **kwargs)
self.lookup_val = [('', 'None')]
def queryset(self, request, queryset):
print self.lookup_val
print self.field.flatchoices
if self.lookup_val == '':
return queryset.filter(choice_field='')
else:
return queryset.filter(choice_field=self.lookup_val)
def choices(self, cl):
pass
然后在管理类中
list_filter = [..., ('choice_field', ChoiceFieldFilter), ...]
但它无法正常工作,我无法在django admin中看到 None
过滤器
2 回答
默认情况下,admin.AllValuesFieldListFilter返回一个选项的值,而不是选择的详细名称 . 因此,为了解决它,使用修改后的admin.AllValuesFieldListFilter .
Usage:
您不必进行自定义列表过滤 . 只需使用django的AllValuesFieldListFilter