2012-02-16 20 views
158

Jestem pewien, że to jest trywialna operacja, ale nie wiem, jak to się robi ... Jak utworzyć zapytanie django dla listy wartości.filtr django z listą wartości

Tam musi być coś bardziej inteligentne niż to:

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

szukam dostać je wszystkie w jednym serialu z czymś takim:

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

możliwe duplikat [? Jak filtrować queryset django za pomocą tablicy na polu jak "IN" SQL za] (http://stackoverflow.com/questions/4016794/ how-to-filter-a-django-queryset-using-tablica-on-a-field-like-sqls-in) –

+0

Możliwy duplikat [Jak filtrować zestaw zapytań django za pomocą tablicy w polu takim jak SQL " IN "?" (Https://stackoverflow.com/questions/4016794/how-to-filter-a-django-queryset-using-an-array-on-a-field-like-sqls-in) – ChillarAnand

Odpowiedz

37

Gdy masz listę przedmiotów i chcesz sprawdzić możliwe wartości z listy t nie możesz użyć =.

Zapytanie sql będzie takie, jak SELECT * FROM mytable WHERE ids=[1, 3, 6, 7, 9], co nie jest prawdą. Do tego celu należy użyć operatora in, aby zapytanie wyglądało jak: SELECT * FROM mytable WHERE ids in (1, 3, 6, 7, 9), ponieważ ten Django zapewnia operatorowi __in.

+13

+1 za małe wyjaśnienie. Chociaż wiem, że mogę czytać dokumenty, to niekoniecznie oznacza, że ​​rozumiałem dokumenty. –

+0

@AustinA dzięki. – Nilesh

0

Od 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>}