首页 > 解决方案 > 按类别过滤

问题描述

我想按类别过滤。我有很多类别,它们被翻译成 3 种语言。它们也可以动态添加。现在我按主键过滤,它似乎工作正常,但我需要有默认选择的“全部”类别。如何避免此类别的硬编码值?

def autocomplete(request):
    if 'term' in request.GET:
        term = request.GET.get('term')
        qs = Article.objects.all()
        if 'category_id' in request.GET:
            category_id = request.GET.get('category_id')
            # 4 stands for all category
            if category_id != '4':
                qs = qs.filter(category__pk=category_id)

        qs = qs.filter(name__istartswith=term)
        names = []
        for article in qs:
           names.append(article.name)

        return JsonResponse(names, safe=False)
    return render(request, 'home.html')

谢谢!

标签: pythondjangodatabase

解决方案


你可以像下面的代码那样做:

def autocomplete(request):
    term = request.GET.get('term')
    category_id = request.GET.get('category_id')
    if term:
        qs = Article.objects.all()
        # Not empty and not 4 stands for all category
        if category_id and category_id != '4':
            qs = qs.filter(category__pk=category_id)
        # filter by term
        qs = qs.filter(name__istartswith=term)
        # get name values and convert queryset to list
        names = list(qs.values_list("name", flat=True))
        return JsonResponse(names, safe=False)
    return render(request, 'home.html')

推荐阅读