Django 쿼리를 값 목록으로 필터링하려면 어떻게해야합니까?


291

나는 이것이 사소한 작업이라고 확신하지만 어떻게 수행되는지 알 수 없습니다.

이보다 더 똑똑해야합니다.

ids = [1, 3, 6, 7, 9]

for id in ids:
    MyModel.objects.filter(pk=id)

나는 다음과 같은 하나의 쿼리로 그것들을 모두 얻으려고합니다.

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

Django 쿼리를 값 목록으로 필터링하려면 어떻게해야합니까?



답변:


539

로부터 장고 문서 :

Blog.objects.filter(pk__in=[1, 4, 7])

빈 목록을 전달하거나 레코드를 반환하지 않으면 오류가 발생합니까?
Rakmo

@OmkarDeshpande 아니오
DylanYoung

@DylanYoung 그래서 그것은 기록을 반환하지 않습니다
Rakmo

2
@OmkarDeshpande 정확합니다. 그러나 전화 get()하면 ObjectDoesNotExist 오류가 발생합니다.
DylanYoung

48

항목 목록이 있고 목록에서 가능한 값을 확인하려면을 사용할 수 없습니다 =.

SQL 쿼리는 SELECT * FROM mytable WHERE ids=[1, 3, 6, 7, 9]사실이 아닙니다. Django 제공 연산자 in와 같은 쿼리가되도록 연산자 를 사용해야 SELECT * FROM mytable WHERE ids in (1, 3, 6, 7, 9)합니다 __in.


20
작은 설명은 +1입니다. 문서를 읽을 수 있다는 것을 알고 있지만 반드시 문서를 이해했다는 의미는 아닙니다.
Austin A

6

로부터 장고 문서 :

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>}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.