2013-02-18 25 views
1

我有以下可選的過濾器:出錯無效字面INT()基數爲10: ''

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

當可選CAT_ID不通過我得到這個錯誤:

ValueError at /api/products/ 
invalid literal for int() with base 10: '' 

我的問題是,我怎麼讓這個當CAT_ID不通過過濾器是這樣的......

return Product.objects.filter() 

還是有人可以給我一個更好的方法,如果我有10個可選的過濾器包含在內怎麼辦?

+0

'如果CAT_ID不是None'或類似的東西? – 2013-02-18 13:42:00

+0

,但它仍然在過濾器部分Product.objects.filter(),如果我有10個不同的過濾器?如果不是陳述,我不需要10個。人們一直都有這種情況,對吧? – jason 2013-02-18 13:43:58

回答

5

也許這樣的事情?

filters = {} 

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

if cat_id: 
    filters["category__pk"] = cat_id 

return Product.objects.filter(**filters) 

編輯:如果我有不少論據去過濾,我會嘗試做一些像這樣(未經):

# with all your possible lookups here 
possible_filters = {"cat_id": "category__pk", "colour": "colour__pk", } 

# and then go through the provided fields, and toggle the filters accordingly 
enabled_filters = { possible_filters[filter]: self.request.GET[filter] for filter 
        in possible_filters 
        if self.request.GET.get(filter, None) } 

return Product.objects.filter(**enabled_filters) 
+0

這是完美的。這是你自己怎麼做的嗎? – jason 2013-02-18 13:54:39

+0

是的,它很好用。我已經添加了另一個處理許多查找參數的代碼片段。 – Matt 2013-02-18 14:24:01

相關問題