Django admin,基于boolean callable列出过滤器

在模型管理对象上,我有一个可调用的函数,它返回True或False.我希望能够使用此可调用来过滤列表中显示的内容(即list_filter).但是下面的代码不起作用,因为你只能在字段上使用list_filter:

...

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

有没有办法使用True / False可调用来过滤管理员中的列表?或者,如果您需要此功能,是否必须对数据进行非规范化?

我注意到在开发文档中,现在可以实现:https://docs.djangoproject.com/en/dev/ref/contrib/admin/#django.contrib.admin.ModelAdmin.list_filter

然而在1.3文档(我正在使用的Django版本)中它没有提到这个:https://docs.djangoproject.com/en/1.3/ref/contrib/admin/#django.contrib.admin.ModelAdmin.list_filter所以我假设我不能在我的项目中使用新功能:-(

最佳答案 如果你可以用ORM双下划线查找路径以某种方式表达bar函数的操作,那么你可以在Django 1.3中创建一个FilterSpec

请参阅django.contrib.admin.filterspecs

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

有关自定义FilterSpec的示例,请参阅:
http://djangosnippets.org/snippets/2644/

点赞