Django 管理,基于 bool 可调用的列表过滤器

标签 django django-models django-admin

在模型管理对象上,我有一个可调用函数,它返回 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/

关于Django 管理,基于 bool 可调用的列表过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8404410/

相关文章:

django - 在 Django 中实现 "opening hours"的任何现有解决方案

python - 我应该把这些功能放在哪里?在 models.py 内还是在views.py 内?

python - apache2 服务器上使用 wsgi 的两个 Django 应用程序?

python - 如何反转 django models.BooleanField 的值?

python - 在 django admin 中动态设置 readonly_fields

python - Django Blob 模型字段

python - Django:自定义序列化选项?

python - 具有类似错误 'tuple' 对象的 Django raw() 查询没有属性 'id'

django - 从 AbstractUser 继承的模型不会散列密码字段

Django - 模板标签中的 verbose_name