【问题标题】:How to create a sub-category filter which depends on a category filter in Django admin?如何在 Django admin 中创建一个依赖于类别过滤器的子类别过滤器?
【发布时间】:2013-01-12 20:52:38
【问题描述】:

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

如何使用ModelAdmin.list_filter 实现这一目标?

谢谢

【问题讨论】:

    标签: django filter admin


    【解决方案1】:

    为 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”的错误。
    • 有人有这个代码的无错误版本吗? Django 3.2
    猜你喜欢
    • 2015-02-25
    • 2016-05-01
    • 1970-01-01
    • 2017-11-06
    • 2015-05-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-11
    相关资源
    最近更新 更多