2013-02-17 114 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