roc*_*rty 4 python django django-admin
默认情况下,django 管理员list_filter提供模型选择中可用的所有过滤器。但除了那些我还想要一个过滤器,我们可以说它是“无”过滤器。
class Mymodel:
char choice field (choices=(('1', 'txt1', '2', 'txt2')), null=True)
class MymodelAdmin(admin.ModelAdmin):
...
list_filter = [..., choice_field, ...]
...
Run Code Online (Sandbox Code Playgroud)
这将在管理面板中设置三个过滤器(右侧过滤器)All, 'txt1', 'txt2',. 正确的?如果没有从选择中分配值,我想要再添加一个过滤器“无”。
到目前为止我尝试过的..
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
Run Code Online (Sandbox Code Playgroud)
然后在管理课上
list_filter = [..., ('choice_field', ChoiceFieldFilter), ...]
Run Code Online (Sandbox Code Playgroud)
但它不起作用,我无法None在 django admin 中看到过滤器
小智 6
您不必创建自定义列表过滤器。只需使用 django 的 AllValuesFieldListFilter
from django.contrib.admin.filters import AllValuesFieldListFilter
...
list_filter = [..., ('choice_field', AllValuesFieldListFilter)]
...
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5248 次 |
| 最近记录: |