如何动态链接另一个筛选器到现有的查询集?

时间:2015-04-05 02:39:04

标签: django django-queryset

这是我对显示待售商品的商店页面的看法。显示的项目按用户邮政编码或最受欢迎的项目进行过滤。还有按裤子,衬衫等过滤的链接。链接使用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的结果,反之亦然。

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)