ソフトウェア開発 プログラミング

[Django]Querysetのfilterで同じモデルのフィールド同士を検索条件にする

ソフトウェア開発
この記事は約2分で読めます。
スポンサーリンク

DjangoQuerysetfilterメソッドを使用している時に同じモデルの異なるフィールド同士を検索条件に設定する方法を説明します。

スポンサーリンク

前提条件

今回動作確認した環境は下記の通りです。

  • Python:3.6.1
  • Django:3.0.5

同一モデルのフィールド同士を検索条件に設定する

普通に「field_a=field_b」みたいに設定してもエラーになるので、下記のように実装します。

from django.db.models import F

from sample.model import Sample


sample = Sample.objects.filter(field_a=F('field_b'))

djanog.db.modelsF関数を使用することでフィールド同士を検索条件に設定可能です。

イコールの条件だけでなく、「gte」や「lte」などの比較条件も使用できます。

sample = Sample.objects.filter(field_a__gte=F('field_b'))

sample = Sample.objects.filter(field_a__lte=F('field_b'))

最後に

同一モデルのフィールド同士を検索条件として設定することはきちんとモデルの設計などできてたらあまりないんですが、既存のシステムのリプレースなどでは既存のコードで普通にフィールド同士の比較が検索条件に入っていたりするので、きちんと設定方法を理解しておきたいですね。

スポンサーリンク
スポンサーリンク
KoEをフォローする
CodeLab

コメント

タイトルとURLをコピーしました