擅长:python、mysql、java
<p>由于Django 1.4给过滤器带来了一些变化,我想我节省了一些时间,我只是花在修改Cerin接受的答案中的代码来使用django1.4rc1。</p>
<p>我有一个名为“started”的TimeField(null=True)模型,我想过滤空值和非空值,所以这和OP的问题很相似。<br/>
所以,这是对我有用的。。。</p>
<p>在admin.py中定义(实际包括)这些:</p>
<pre><code>from django.contrib.admin.filters import SimpleListFilter
class NullFilterSpec(SimpleListFilter):
title = u''
parameter_name = u''
def lookups(self, request, model_admin):
return (
('1', _('Has value'), ),
('0', _('None'), ),
)
def queryset(self, request, queryset):
kwargs = {
'%s'%self.parameter_name : None,
}
if self.value() == '0':
return queryset.filter(**kwargs)
if self.value() == '1':
return queryset.exclude(**kwargs)
return queryset
class StartNullFilterSpec(NullFilterSpec):
title = u'Started'
parameter_name = u'started'
</code></pre>
<p>而不仅仅是在ModelAdmin中使用它们:</p>
<pre><code>class SomeModelAdmin(admin.ModelAdmin):
list_filter = (StartNullFilterSpec, )
</code></pre>