django admin 过滤器级联

qdo*_*dot 5 database django django-admin

我有一个问题 - Django 管理界面是否可以以这样的方式进行自定义,使其仅显示与当前所选过滤器匹配的数据子集中出现的过滤器选项?

假设我有一个包含三个对象的数据库:

a.Foo = "One"
a.Bar = "Drink"

b.Foo = "One"
b.Bar = "Shot"

c.Foo = "Two"
c.Bar = "Shot"
Run Code Online (Sandbox Code Playgroud)

以及一个 django 管理界面,其中包含“Foo”和“Bar”过滤器。我想要以下行为:

  • 如果没有选择过滤器,'Foo' 会列出“One”、“Two”;“酒吧”列出“饮料”、“烈酒”
  • 如果“Foo”过滤器设置为“One”,“Bar”会列出“Drink”和“Shot”
  • 如果“Foo”过滤器设置为“Two”,“Bar”仅列出“Shot”
  • 如果“Bar”过滤器设置为“Shot”,“Foo”会列出“One”和“Two”
  • 如果“Bar”过滤器设置为“Drink”,“Foo”仅列出“One”

干杯!


更具体地说 - 阅读一些文档后:

from django.contrib.admin import SimpleListFilter

class SomeFilter(SimpleListFilter):
  title = "Foo"
  parameter_name="Some"
  def lookups(self, request, model_admin):
    qs = model_admin.queryset(request)
    print qs.query
    return (('Foo', 'Bar'))
  def queryset(self, request, queryset):
    if (self.value()):
      return queryset.filter(Some=self.value())
    else:
      return queryset
Run Code Online (Sandbox Code Playgroud)

然而,它所做的是获取“查询集”,就像没有其他过滤器一样。我怎样才能让它通过其他过滤器?


理论上我可以手动解析请求和过滤器 - 但肯定需要有一种方法来管理所有过滤器。

Thi*_*t J 2

这种动态过滤看起来确实很像分面。虽然您可以使用标准查询集实现此结果,但这可能不是最佳的。您可能有更多机会使用专用工具,例如 Solr。

Haystack 还有一个关于分面的文档页面