2013-11-14 31 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中。 –