我該如何構建一個從django獲取多行的QuerySet?我認爲filter()會起作用,但它似乎更糟糕。在django中獲取一個查詢的多行?
例如,我在模型Car中有兩行,有兩個文本屬性(許可證和vin)。現在說我想打印這些車的牌照和酒。我怎樣才能做到這一點與一個數據庫調用?
這裏有一個答案,這將使兩臺數據庫調用:
#using get(), two total queries
a = Car.objects.get(id=1) #query here
b = Car.objects.get(id=2) #query here
print(a.license + a.vin) #no query
print(b.license + b.vin) #no query
這顯然是因爲我做了兩個GET()查詢沒有工作。所以接下來我會嘗試過濾器():
#using filter(), four total queries
c = Car.objects.filter(id__in=(1,2)) #no query
print(c[0].license + c[0].vin) #two queries
print(c[1].license + c[1].vin) #two queries
嗯,這很奇怪,爲什麼做四個數據庫調用?有沒有一種方法可以讓它在一次數據庫調用中獲得兩個?
嗯,這是愚蠢的。我需要做的就是在它前面放一個列表()。瘋。謝謝!對於額外的業力:任何人都可以解釋爲什麼需要list()以及爲什麼它不會啓動查詢? – user749618 2011-06-14 00:54:04
那麼當你將一個查詢集編入索引時,它會認爲你只想從該查詢集中找到單個項目,所以它不會爲整個項目執行查詢,它只會爲你想要的單個項目執行一個查詢。但是,是的,我可以看到它看起來很奇怪:( – 2011-06-14 00:56:06
也可以考慮使用'Car.objects.all()'而不是'filter'來獲取數據庫中的所有對象。 – 2011-06-14 01:30:03