2015-04-05 33 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