【发布时间】:2011-11-09 21:38:21
【问题描述】:
我有一个问题 - 是否可以自定义 Django 管理界面,使其仅显示与当前选择的过滤器匹配的数据子集中出现的过滤器选项?
假设我有一个包含三个对象的数据库:
a.Foo = "One"
a.Bar = "Drink"
b.Foo = "One"
b.Bar = "Shot"
c.Foo = "Two"
c.Bar = "Shot"
还有一个带有“Foo”和“Bar”过滤器的 django 管理界面。我想要以下行为:
- 如果没有选择过滤器,'Foo' 会列出 "One","Two"; “酒吧”列出“饮料”、“射击”
- 如果“Foo”过滤器设置为“One”,“Bar”会同时列出“Drink”和“Shot”
- 如果“Foo”过滤器设置为“Two”,“Bar”仅列出“Shot”
- 如果“Bar”过滤器设置为“Shot”,“Foo”会同时列出“One”和“Two”
- 如果“酒吧”过滤器设置为“饮料”,则“Foo”仅列出“一个”
干杯!
更具体地说 - 在阅读了一些文档之后:
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
然而,它所做的是获取“查询集”,就像没有其他过滤器一样。我怎样才能通过其他过滤器?
理论上我可以手动解析请求并过滤 - 但肯定需要一种方法来管道所有过滤器。
【问题讨论】:
-
经过一些研究后添加了更多信息 - 在所有其他过滤器都通过它之后,我无法弄清楚如何获取查询集。
标签: django database django-admin