我想按国家和品牌过滤我的产品,因此我创建了一个视图:
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为什么会这样?
答案 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'))