メインコンテンツまでスキップ

データのフィルタリング

JSONフィルター式は、他の辞書やリストを含むことができる辞書とリストで構成されます。そのような各オブジェクトは論理的な条件です。

辞書内の条件のセットは、and論理式によって結合されます。

リスト内の条件のセットは、or論理式によって結合されます。

特別な辞書キー orand 、および not は、明示的な論理演算子として使用できます。

or キーに続く値は、or論理演算子によって結合された条件を含むリストである必要があります。and キーに続く値も、条件を含むリストである必要があります。この場合、そのような条件and論理演算子によって結合されます。

not キーに続く値は、その値が反転される条件である必要があります。

ダッシュ - で始まる辞書キーは無視され、それに続く値は、そのようなキーを含む式にマージされる条件である必要があります。

特別なキーとは異なる辞書キーは、Djangoドキュメント https://docs.djangoproject.com/en/2.2/ref/models/lookups/ で説明されているように、ルックアップ式として使用されます。特別なキーに似たフィールド名は禁止されているため、特別なキーとフィールド名を常に区別できます。

Djangoのルックアップ式は、リレーションを介して続くフィールド名、および lowerfirst3charsreversedなどの変換、exacticontainsgtなどのルックアップによって拡張できるフィールド名で構成されます。フィールド名、変換、およびルックアップは、Djangoの標準ルックアップ式セパレーターである二重アンダースコアで区切られます。例: project__name__first3chars__icontains

ルックアップ式に続く値は検索値です。単純な値である場合もあれば、対応するフィールドがJSONフィールドであればJSON値である場合もあります。__inなどの一部のルックアップ式は、検索値としてリストを想定しています。

文字列検索値は商用アットマーク @ で始めることができます。このような値は、F-式で説明されているように、フィールドへの参照を意味します。 https://docs.djangoproject.com/en/2.2/ref/models/expressions/#django.db.models.F.

検索値はNoneでも構いません。その場合、対応するルックアップ式は __isnull で拡張され、検索値は True になります。

例と詳細なリファレンスはこちらで確認できます: QuerySet Filter

特定のフィールドのみを選択する

さらに、利用するアプリケーションがオブジェクト全体を必要としない場合、only_fieldsセレクターを使用して特定のフィールドのみを取得できます。

booking.user_accepted_offer_atがnullではない予約のみを取得するにはどうすればよいですか?

Filtering bookings
/api/v2/booking/?user_accepted_offer_at__isnull=false&no_total_count=true
/api/v2/booking/?user_accepted_offer_at__isnull=false&no_total_count=true&only_fields=user_accepted_offer_at,id

指定された値(例: 2025-09-23T04:26:22)より後の開始日を持つサブスクリプションパスを取得するにはどうすればよいですか?

Filtering subscription passes
/api/v2/subscriptionpass?pass_start__gt=2025-09-23T04:26:22

特定の日のシミュレーション結果のみを、作成時間でソートして取得するにはどうすればよいですか?

Filtering simulations by date
/api/v2/simulation?project={{project_id}}&order_by=-created_at&start_time__date=2024-10-01

応答から特定のフィールドをフィルタリングするにはどうすればよいですか?次の例では、選択されたフィールドのみが含まれ、2番目のリクエストでは単一のフィールドが除外されます。

Filtering simulations by date
/api/v2/simulation?project={{project_id}}&only_fields=id,start_time,name
/api/v2/simulation?project={{project_id}}&exclude_fields=id