Django入門|複数のvalueでクエリセットから一括取得する方法
- 公開日:2019/01/14
- 更新日:2019/01/14
- 投稿者:n bit
Djangoで、複数のvalueでクエリセットを一括取得したい場合があります。そのような時『__in』とリスト形式にしたvalueでクエリセットをフィルタリングして取得する方法を解説します。
この記事は約 分で読めます。(文字)
Djangoで複数のvalueでクエリセットから一括取得
Djangoでクエリセットを取得する時filter()で複数のクエリセットを一括取得するのが基本です。その場合通常1つのvalueを引数に指定し、そのvalueが含まれるクエリセットをフィルタリングします。
pkが『5』のオブジェクトを取得したい場合に利用するのは下記コードです。
tag_pk = 5
tags = Tag.objects.filter(pk=tag_pk)
しかし、複数のpkでクエリセットを取得したい場合もありますよね。例えば次のようなpkリストでフィルタリングするような場合です。
tag_pk_list = [5, 10, 15]
そこで、今回はリスト形式で保持された複数のvalueを使ってクエリセットから一括取得する方法を解説します。
解説には以下のようなモデルからのクエリセット取得を事例に進めていきましょう。
class Tag(models.Model):
name = models.CharField("タグ名", max_length=255)
url = models.CharField("URL", max_length=255, unique=True)
class Meta:
verbose_name_plural = 'タグ'
def __str__(self):
return self.name
複数のvalueから『__in』でクエリセット一括取得
Djangoでリスト形式の値を使って複数のクエリセットを一括取得するために用意されているのが『__in』です。使い方は簡単で一括取得の基準となるkeyの後ろに『__in』を付け足すことでフィルタリングにvalueのリスト形式を利用できます。
- モデル.objects.filter(key__in=【valueのリスト】)
tag_pk_list = [5, 10, 15]
tags = Tag.objects.filter(pk__in=tag_pk_list)
『pk』と『in』の間には『_(アンダーバー)』が2つあることに注意してください。
今日のdot
Djangoにはクエリセットのフィルタリング方法が数多く用意されています。その中でもこの『__in』を使ったリストの複数値からクエリセットを一括取得する方法は割と利用しますので覚えておきましょう。