如何创建一个子类别筛选器,它依赖于Django管理员中的类别筛选器?

时间:2013-01-29 10:07:24

标签: django filter admin

在我的Django管理员模型的列表过滤器中我有一个过滤器Category,我想添加一个过滤器Sub-category,其值取决于所选的Category

如何使用ModelAdmin.list_filter实现此目的?

谢谢

1 个答案:

答案 0 :(得分:4)

为子类别创建一个从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
        )