Django管理员,基于布尔可调用的列表过滤器

Django管理员,基于布尔可调用的列表过滤器,django,django-models,django-admin,Django,Django Models,Django Admin,在模型管理对象上,我有一个可调用的函数,返回True或False。我希望能够使用此callable来过滤列表中显示的内容(即列表过滤器)。但是,以下代码不起作用,因为您只能对字段使用list\u filter: ... class FooAdmin(admin.ModelAdmin): ... list_filter['bar'] def bar(self, obj): x = ... #something boolean return

在模型管理对象上,我有一个可调用的函数,返回True或False。我希望能够使用此callable来过滤列表中显示的内容(即列表过滤器)。但是,以下代码不起作用,因为您只能对字段使用
list\u filter

...

class FooAdmin(admin.ModelAdmin):
    ...
    list_filter['bar']
    def bar(self, obj):
        x = ... #something boolean
        return x
...

是否有任何方法可以使用True/False callable在admin中筛选列表?或者,如果需要此功能,是否必须对数据进行非规范化

我注意到,在开发文档中,这现在是可能的:


但是在1.3文档(我正在使用的Django版本)中没有提到这一点:因此我假设我不能在我的项目中使用新功能:-(

如果您可以用ORM双下划线查找路径来表达
bar
函数的操作,那么您就可以在Django 1.3中创建一个FilterSpec

请参阅
django.contrib.admin.filterspecs

这些类处理生成过滤器选择列表和准备url的查询字符串值等。据我所知,它们通过提供一个
field\u path
属性来工作,管理代码的其他部分使用该属性来过滤变更列表查询集

有关自定义筛选器规范的示例,请参见:

我想接下来的问题是Django 1.4什么时候发布?如果发布时间相对较短(即不到6周),那么我可以使用新的列表过滤器API:)它将在发布时发布。不幸的是,Django没有一个固定的发布时间表。但是,从我所看到的来看,它看起来很接近。开发人员文档没有说您可以使用可调用的作为列表过滤器。@TillBackhaus在开发人员版本中,您可以创建一个在过滤器中使用的类,并在ModelAdmin中将其分配给您的模型-“一个继承自django.contrib.admin.SimpleListFilter的类,您需要为其提供title和parameter_name属性,并覆盖查找和查询集方法”@burhan yes,它允许非常复杂的筛选器。但是,它不允许使用问题中描述的可调用作为条件。