这是我对显示待售商品的商店页面的看法。显示的项目按用户邮政编码或最受欢迎的项目进行过滤。还有按裤子,衬衫等过滤的链接。链接使用AJAX返回查询集。
我的代码存在的问题是点击'裤子'例如,返回只是裤子的查询集,但不按zipcode过滤。我可以同时按两者进行过滤,但如果用户点击“按最受欢迎的项目过滤”,则会出现问题。而不是邮政编码?如何返回裤子和最受欢迎的项目的查询集?
def storefront(request):
if request.user.is_authenticated():
if request.user.my_profile.zipcode:
latest_entries = Entry.objects.filter(zipcode=user.zip).order_by('-pub_date')[:16]
context = {'latest_entries': latest_entries}
else:
latest_entries = Entry.objects.order_by('-pub_date')[:16]
context = {'latest_entries': latest_entries}
else:
latest_entries = Entry.objects.order_by('-pub_date')[:16]
context = {'latest_entries': latest_entries}
if request.is_ajax():
if request.GET.get('filter') == 'shirts':
latest_entries = Entry.objects.filter(entrytype=1)
context = {'latest_entries': latest_entries}
return render(request, 'storefrontload.html', context)
if request.GET.get('filter') == 'pants':
latest_entries = Entry.objects.filter(entrytype=2)
context = {'latest_entries': latest_entries}
return render(request, 'storefrontload.html', context)
if request.GET.get('filter') == 'shoes':
latest_entries = Entry.objects.filter(entrytype=3)
context = {'latest_entries': latest_entries}
return render(request, 'storefrontload.html', context)
return render(request, 'storefront.html', context)
澄清问题:
从最终用户的角度来看,有两个过滤器。 ' zipcode' /'热门商品'和'衬衫'裤子'鞋子'。目前,如果最终用户更改了过滤器2,则它不会保留过滤器1的结果,反之亦然。
答案 0 :(得分:1)
您可以再次在查询集上调用filter()
方法,以便链接过滤器没有问题:
latest_entries = Entry.objects.filter(zipcode=user.zip)
...
if request.GET.get('filter') == 'shirts':
latest_entries = latest_entries.filter(entrytype=1)