2015-04-05 27 views
0

这是我对显示待售商品的商店页面的看法。显示的项目由用户邮政编码或最受欢迎的项目过滤。也有链接通过裤子,衬衫等进行过滤。链接使用AJAX返回查询集。如何动态链接另一个过滤器到现有的查询集?

我的代码的问题是,点击“裤子”,例如,返回查询集只是裤子,但不过滤邮编。我可以通过这两种方式进行筛选,但是如果用户点击“最受欢迎物品筛选”而不是邮政编码,问题就会变成什么样子?我将如何返回裤子和最受欢迎物品的查询集?

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) 

为了澄清这个问题:

但从有两个过滤器终端用户点。 '邮编'/'流行商品'和'衬衫'/'裤子'/'鞋子'。目前,如果最终用户更改过滤器2,则不会保留过滤器1的结果,反之亦然。

回答

1

您可以再次调用一个查询集filter()方法,所以没有问题链过滤器,就像这样:

latest_entries = Entry.objects.filter(zipcode=user.zip) 
... 
if request.GET.get('filter') == 'shirts': 
    latest_entries = latest_entries.filter(entrytype=1) 
+0

这是有帮助的我猜,但仍然没有解决我的问题。因为过滤衬衫不记得最初是选择了“邮编”还是“流行”。 – stephan 2015-04-07 17:42:26