2014-12-07 200 views
1

很多時候,我發現自己寫類似的代碼:過濾對象

query = MyModel.objects.all() 
if request.GET.get('filter_by_field1'): 
    query = query.filter(field1 = True) 
if request.GET.get('filter_by_field2'): 
    query = query.filter(field2 = False) 
field3_filter = request.GET.get('field3'): 
if field3_filter is not None: 
    query = query.filter(field3 = field3_filter) 
if field4_filter: 
    query = query.filter(field4 = field4_filter) 
# etc... 
return query 

有建築物查詢的更好的,更通用的方法,如上面的那個?

回答

3

如果是以往任何時候都將在請求得到的唯一的事情是可能的查詢參數,你可以這樣做:

query = MyModel.objects.filter(**request.GET) 
+0

這是有道理的。兩個問題:(1)並不是所有的參數都來自'request.GET'(只是編輯了這個問題來反映這個問題),(2)我不想在每個字段上都允許過濾。 – Tzach 2014-12-07 14:19:24

+0

那麼,你可以建立一個包含請求和其他地方的參數組合的字典,並在必要時進行消毒;理論是一樣的。 – 2014-12-07 15:58:44