2013-11-14 14 views
7

Ho osservato questo comportamento e non ho capito bene. Permettetemi di dire che fare una query:Django: controlla se il valore in values_list con e senza prefetch_related/select_related

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

E ottengo:

[1,2,3,4] 

Poi voglio verificare se un certo valore è nella lista dei PKS tornato:

val = 2 
print val in result_pks 

Questo restituirà True, ma se invece cambio risultato a:

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

Ho ancora:

[1,2,3,4] 

Ma quando lo faccio:

val=2 
print val in result_pks 

ottengo False. Ho provato a utilizzare select_related invece, e ciò ha restituito True come mi aspettavo. Qualcuno può spiegarmi perché la differenza?

+0

Quale versione di Django stai usando? –

risposta

7

Stai utilizzando Django 1.5?

Si è verificato un errore che ha causato il fallimento della ricerca in quando si utilizza prefetch_related: bug 20242.

Questo problema è stato risolto in Django 1.6.

+0

Quindi, la correzione potrebbe essere 'print val in list (result_pks)' – karthikr

+0

Grazie. Sto usando 1.4 a causa di GAE – CoffeeJack

+0

@ CoffeeJack: non sono sicuro quando il bug è stato introdotto, ma potrebbe anche essere in Django 1.4. –

Problemi correlati