2013-02-17 116 views
0

作爲Django的新手,我仍然在學習繩索我的問題不在於直接使用語法,而是最好的方法。如何正確處理KeyErrors

當網址中沒有值時,你將如何處理下面的內容。我收到一個錯誤。

cat_id = self.request.GET.get('cat_id', '') 
     return Product.objects.filter(category=cat_id) 

回答

2
from django.shortcuts import get_object_or_404 

cat_id = self.request.GET.get('cat_id', '') 

# 404 if the category deosn't exist 
category = get_object_or_404(Category, pk=cat_id) 

# filter for products based on a known existing category 
products = Product.objects.filter(category=category) 

在其他情況下我可能會做這樣的事情

if 'cat_id' in self.request.GET: 
    cat_id = self.request.GET.get('cat_id') 
    # now do stuff with cat_id 
+0

,但是然後Product.objects.filter(category = cat_id)會給出一個錯誤嗎? – jason 2013-02-17 19:40:47

+0

如果發送了有效的類別標識,我們只想獲取產品。所以,首先我們嘗試使用GET中的id加載一個類別對象。過濾器可以基於id或on對象過濾,如果我們需要確保對象存在,我們可以加載它。 – 2013-02-17 19:40:47

+1

也只是注意到,如果在過濾器中使用ID,假設cat_id是過濾器應該是Category類型的類別ID:'Product.objects.filter(category__pk = cat_id)' – 2013-02-17 19:41:44

1

使用0作爲默認值而不是空字符串。

+0

但這時如果將值0,如果沒有值傳遞嘗試和過濾。如果沒有值傳遞,我想不過濾。 – jason 2013-02-17 19:36:19

+1

然後,您應該使用if語句,因爲Francis已經顯示 – 2013-02-17 19:37:33