为什么过滤器不起作用?

时间:2017-06-14 10:52:31

标签: django django-views django-queryset

我想按国家和品牌过滤我的产品,因此我创建了一个视图:

class CategoryView(ListView):
    template_name = '__index.html'
    context_object_name = 'products'
    paginate_by = 20

    def get_queryset(self):
        queryset = Product.objects.filter(category__slug=self.kwargs.get('slug')).order_by('-created')

        request = self.request

        # Filter By Brand and Country
        if request.GET.get('country'):
            print(request.GET.get('country'))
            queryset.filter(brand__country__slug=request.GET.get('country'))

        if request.GET.get('brand'):
            print(request.GET.get('brand'))
            queryset.filter(brand__slug=request.GET.get('brand'))

        print(queryset[0].brand.slug)
        print(queryset[0].brand.country.slug)

        return queryset

但是当我通过这样的查询字符串时产品没有过滤:?brand = astra-gold& country = chehiya 并且打印功能告诉我:

chehiya ASTRA-金 威尼托 italiya

正如你所见,chehiya!= italiya和astra-gold!= veneto。 Bun为什么会这样?

2 个答案:

答案 0 :(得分:1)

当您在查询集上调用filter()时,它会创建一个新的查询集。原始查询集未更改。要使过滤器生效,您需要将结果分配回queryset,例如:

    if request.GET.get('country'):
        print(request.GET.get('country'))
        queryset = queryset.filter(brand__country__slug=request.GET.get('country'))

答案 1 :(得分:0)

我忘了这个

queryset = queryset.filter(brand__country__slug=request.GET.get('country'))