我有2個Django模型:合併多個Django的結果集
class Foo(models.Model):
baz = models.CharField()
class Bar(models.Model);
foo = models.ForeignKey(Foo)
qux = models.CharField()
數據如下:
Foo
id baz
4 X
5 Y
6 Z
Bar
id foo_id qux
1 4 A
2 5 A
3 5 B
4 6 B
現在我做2個查詢上酒吧,過濾上qux:
resA = [1, 2] (actually bar instances; shown bar.id for convenience)
resB = [3, 4] (actually bar instances; shown bar.id for convenience)
什麼是現在最快的方式與這些列表在一起,以便結果將是:
resAND = [5] (foo.id)
現在我做:
ret = []
nr_sets = 2
foos = Foo.objects.all()
bars = list(resA + resB)
for foo in foos:
test = filter(lambda bar : bar.foo_id == foo.id, bars)
if test == nr_sets;
ret.append(foo)
然而,這是可怕的慢。任何想法在加速?我特別尋找後期查詢解決方案,但也歡迎關於查詢('s)的好主意。
「什麼是現在最快的方式與這些列表結合在一起,以便結果如下:」?你能解釋這個結果是如何來自這兩個列表的? 「AND」一詞似乎並不適用。 – 2012-01-09 11:44:15
只是做一個新的查詢而不是試圖結合兩個查詢不是更簡單(也更快)嗎? – 2012-01-09 11:47:15