値のリストでDjangoクエリをフィルタリングするにはどうすればよいですか?


290

これは簡単な操作だと思いますが、どのように行われるのかわかりません。

これよりも賢いものが必要です。

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

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

私は次のようなものですべてを1つのクエリで取得したいと考えています。

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

値のリストでDjangoクエリをフィルタリングするにはどうすればよいですか?



回答:



48

アイテムのリストがあり、リストから可能な値を確認する場合、は使用できません=

SQLクエリSELECT * FROM mytable WHERE ids=[1, 3, 6, 7, 9]は、trueではないようなものになります。inこれには演算子を使用する必要があるため、クエリはSELECT * FROM mytable WHERE ids in (1, 3, 6, 7, 9)そのDjango提供__in演算子のようになります。


20
簡単な説明の場合は+1。私はドキュメントを読むことができることを知っていますが、必ずしもドキュメントを理解したとは限りません。
オースティンA

6

Djangoのドキュメントから:

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.