2013-11-14 69 views
7

我觀察過這種行爲,我不太明白。讓說我做一個查詢:Django:檢查values_list中的值是否與prefetch_related/select_related相關

result = model.objects.all() 
result_pks = result.values_list("id",flat=True) 
print result_pks 

我也得到:

[1,2,3,4] 

然後,我要檢查,如果某個值是PKS列表中返回:

val = 2 
print val in result_pks 

這將返回True,但是如果改爲將結果更改爲:

result = model.objects.prefetch_related("related_field").all() 
result_pks = result.values_list("id",flat=True) 
print result_pks 

我仍然得到:

[1,2,3,4] 

但是當我做:

val=2 
print val in result_pks 

我得到錯誤的。我嘗試使用select_related代替,並且返回True,如我所料。有人可以向我解釋爲什麼差異?

+0

你使用的是什麼Django版本? –

回答

7

你使用的是Django 1.5嗎?

使用prefetch_related時出現了一個導致in查找失敗的錯誤:bug 20242

這已在Django 1.6中修復。

+0

所以,修復可能是'print val in list(result_pks)' – karthikr

+0

謝謝。我使用1.4是因爲GAE – CoffeeJack

+0

@CoffeeJack:不確定什麼時候引入了錯誤,但它也可能在Django 1.4中。 –