2011-02-28 90 views
1

我可以結合使用查詢集上的filter()和get()來返回django視圖中的對象嗎? 我有以下看法;在Django中使用fiter()然後get()queryset?

def my_view(request, city, store, item): 
item = Item.objects.filter(store__city=city, city=city).get(item=item) 

項目都是獨特的城市和商店。我目前正在嘗試基於兩個ForeignKey字段篩選查詢集,然後在CharField上使用get,但是收到對象不存在的錯誤消息。我是否正確地處理了這個問題,或者我的語法是否在某處?由於

回答

1

如果相關的過濾器只返回1的結果,那麼你可以使用:

def my_view(request, city, store, item): 
    item = Item.objects.filter(store__city=city, city=city)[0] 

其過濾項記錄並將其存儲在一個查詢集,其中有一個列表lilke結構,然後在第一個元素...

如果你一定要得到一個結果,那麼你可以使用獲得的,而不是過濾器:

item = Item.objects.get(store__city=city, city=city) 

但是,如果不存在記錄下哪些適合你的文件管理器CRI teria,那麼你會得到一個錯誤。所以,如果你不知道過濾是否會返回一個結果還是不行,那麼使用:

item = Item.objects.filter(store__city=city, city=city) 
if item: 
    item = item[0] 

這ckecks生成的查詢集,如果存在任何需要的第一個結果。

+0

謝謝,我超載變量,你的解釋幫助我再看一次,非常感謝。 – thesteve 2011-02-28 09:09:53