就我而言,我有一些來自表單的列名。我想過濾以確保它們都是真實的。以下是我目前要做的事:更清晰的方式來查詢Django中動態數量的列?
for op in self.cleaned_data['options']:
cars = cars.filter((op, True))
現在工作但也有是可能的〜40列,以進行測試,因此它不會出現非常有效的保持查詢。
有沒有一種方法,我可以凝結成一個篩選查詢呢?
就我而言,我有一些來自表單的列名。我想過濾以確保它們都是真實的。以下是我目前要做的事:更清晰的方式來查詢Django中動態數量的列?
for op in self.cleaned_data['options']:
cars = cars.filter((op, True))
現在工作但也有是可能的〜40列,以進行測試,因此它不會出現非常有效的保持查詢。
有沒有一種方法,我可以凝結成一個篩選查詢呢?
Django的查詢集懶惰,所以你當前正在做的實際上是相當有效的。在您嘗試訪問QuerySet中的某個字段之前,數據庫不會被擊中...假設,即您沒有編輯出某些代碼,並且實際上是這樣的:
cars = CarModel.objects.all()
for op in self.cleaned_data['options']:
cars = cars.filter((op, True))
更多信息here。
構建查詢作爲字典和使用**操作解壓選項作爲關鍵字參數的過濾方法。
op_kwargs = {}
for op in self.cleaned_data['options']:
op_kwargs[op] = True
cars = CarModel.objects.filter(**op_kwargs)
這是包括在django documentation和已經覆蓋上SO爲好。
這是非常有效的(不屢屢創下的數據庫),但仍然導致反覆克隆查詢集,所以草原Dogg的解決方案(建立一個字典,並把它作爲kwargs)將有所加快。 – 2009-01-26 19:14:33