2008-12-09 37 views
0

就我而言,我有一些來自表單的列名。我想過濾以確保它們都是真實的。以下是我目前要做的事:更清晰的方式來查詢Django中動態數量的列?

for op in self.cleaned_data['options']: 
    cars = cars.filter((op, True)) 

現在工作但也有是可能的〜40列,以進行測試,因此它不會出現非常有效的保持查詢。

有沒有一種方法,我可以凝結成一個篩選查詢呢?

回答

3

Django的查詢集懶惰,所以你當前正在做的實際上是相當有效的。在您嘗試訪問QuerySet中的某個字段之前,數據庫不會被擊中...假設,即您沒有編輯出某些代碼,並且實際上是這樣的:

cars = CarModel.objects.all() 
for op in self.cleaned_data['options']: 
    cars = cars.filter((op, True)) 

更多信息here

+0

這是非常有效的(不屢屢創下的數據庫),但仍然導致反覆克隆查詢集,所以草原Dogg的解決方案(建立一個字典,並把它作爲kwargs)將有所加快。 – 2009-01-26 19:14:33

9

構建查詢作爲字典和使用**操作解壓選項作爲關鍵字參數的過濾方法。

op_kwargs = {} 
for op in self.cleaned_data['options']: 
    op_kwargs[op] = True 
cars = CarModel.objects.filter(**op_kwargs) 

這是包括在django documentation和已經覆蓋上SO爲好。

相關問題