【发布时间】:2013-01-12 20:52:38
【问题描述】:
在我的 Django 管理员的模型列表过滤器中,我有一个过滤器 Category,我想添加一个过滤器 Sub-category,其值取决于所选的 Category 值。
如何使用ModelAdmin.list_filter 实现这一目标?
谢谢
【问题讨论】:
在我的 Django 管理员的模型列表过滤器中,我有一个过滤器 Category,我想添加一个过滤器 Sub-category,其值取决于所选的 Category 值。
如何使用ModelAdmin.list_filter 实现这一目标?
谢谢
【问题讨论】:
为 Sub-Category 创建一个继承自 SimpleListFilter 的类。
在lookups方法内部检查request.GET内部是否有Category的匹配查询字符串,如果有,根据这个过滤器做一个查询集。
应该看起来像这样:(根据你的真实模型更改..可能有语法错误,我没有测试代码,但它应该看起来非常相似)
class SubCategoryFilter(SimpleListFilter):
title = 'sub category'
parameter_name = 'sub_category'
def lookups(self, request, model_admin):
sub_categories = Category.objects;
if 'category' in request.GET:
sub_categories = sub_categories.filter(main_category=request.GET['category'])
return (
(sub_cat.pk,sub_cat.text) for sub_cat in sub_categories
)
【讨论】:
Category.objects.all() 而不是 Category.objects。否则,您将收到类似“Manager object is not iterable”的错误。