2012-02-16 39 views
158

Estoy seguro de que esta es una operación trivial, pero no puedo entender cómo se hace ... ¿Cómo puedo crear una consulta django para una lista de valores?filtro django con lista de valores

No tiene que haber algo más inteligente que esto:

ids = [1, 3, 6, 7, 9] 
for id in ids: 
    MyModel.objects.filter(pk=id) 

Estoy buscando para llegar a todos ellos en un solo espectáculo con algo como:

ids = [1, 3, 6, 7, 9] 
MyModel.objects.filter(pk=ids) 
+6

posible duplicado de [? Cómo filtrar un conjunto de consultas Django utilizando una matriz en un campo como "IN" de SQL] (http://stackoverflow.com/questions/4016794/ how-to-filter-a-django-queryset-using-an-array-on-a-field-like-sqls-in) –

+0

Posible duplicado de [Cómo filtrar un queryset de django usando una matriz en un campo como el de SQL " IN "?] (Https://stackoverflow.com/questions/4016794/how-to-filter-a-django-queryset-using-an-array-on-a-field-like-sqls-in) – ChillarAnand

Respuesta

37

Cuando tiene una lista de elementos y quiere verificar los valores posibles de la lista t Cuando no puedes usar =.

La consulta sql será como SELECT * FROM mytable WHERE ids=[1, 3, 6, 7, 9] que no es verdadera. Tienes que usar el operador in para esto, así tu consulta será como SELECT * FROM mytable WHERE ids in (1, 3, 6, 7, 9) para que Django proporcione el operador __in.

+13

+1 para una pequeña explicación. Aunque sé que puedo leer los documentos, eso no significa necesariamente que haya entendido los documentos. –

+0

@AustinA gracias. – Nilesh

0

Desde el Django documentation:

Blog.objects.in_bulk([1]) 
{1: <Blog: Beatles Blog>} 

Blog.objects.in_bulk([1, 2]) 
{1: <Blog: Beatles Blog>, 2: <Blog: Cheddar Talk>} 

Blog.objects.in_bulk([]) 
{} 

Blog.objects.in_bulk() 
{1: <Blog: Beatles Blog>, 2: <Blog: Cheddar Talk>, 3: <Blog: Django Weblog>} 

Blog.objects.in_bulk(['beatles_blog'], field_name='slug') 
{'beatles_blog': <Blog: Beatles Blog>} 
Cuestiones relacionadas