0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Django ORMでの検索フィルタ:大文字小文字の違いと数値比較

Posted at

はじめに

DjangoのORM(オブジェクトリレーショナルマッピング)は、データベース操作を簡素化する強力なツールです。SQLを直接記述する代わりに、Pythonコードを使ってデータベースの検索や操作を行えます。本記事では、Django ORMを使用した検索フィルタリングの中でも、大文字小文字の扱いや数値比較に焦点を当てて解説します。

大文字小文字を区別しない検索と区別する検索

Djangoでは、フィールド値の検索において大文字小文字を区別するかどうかを選択できます。以下にそれぞれの方法を解説します。

大文字小文字を区別しない検索(icontains

icontainsを使用することで、大文字小文字を区別せずにフィールド値を検索できます。

queryset = Clients.objects.filter(name__icontains='john')

このクエリは、name フィールドに「john」を含むすべてのClientsオブジェクトを返します。たとえば、次のようなデータが一致します:

  • 'John'
  • 'john'
  • 'JOHN'
  • 'JoHn'

大文字小文字を区別する検索(contains

containsを使用すると、大文字小文字を区別した検索が可能です。

queryset = Clients.objects.filter(name__contains='john')

このクエリは、nameフィールドに「john」を正確に含むレコードのみを返します。したがって、'John''JOHN'は一致しません。

補足:icontainsiの意味

icontainsの先頭のiは「case-insensitive(大文字小文字を区別しない)」の略です。Djangoでは、icontainsのようにiを加えた検索フィルタを利用することで、より柔軟な検索が可能になります。

Djangoでの数値比較検索:ltgt

数値や日付などの比較検索を行う場合、Django ORMではlt(未満)やgt(より大きい)を使用します。

lt(未満)を使用した検索

以下の例では、商品の価格が1000円未満の商品を検索します。

queryset = Product.objects.filter(price__lt=1000)

このクエリは、priceフィールドの値が1000未満のProductオブジェクトを返します。

gt(より大きい)を使用した検索

契約の終了日が今日またはそれ以降であるレコードを取得する例です。

contracts = Contracts.objects.filter(end_date__gte=today)
  • gt: 「より大きい」(greater than)
  • gte: 「以上」(greater than or equal to)

応用例:除外条件と複合フィルタ

以下は、特定の契約を除外し、さらに終了日が今日以降または未定のものを取得する例です。

contracts = Contracts.objects.exclude(id__in=assigned_contract_ids).filter(
    Q(end_date__gte=today) | Q(end_date__isnull=True)
)
  • exclude: 指定条件を満たすレコードを除外します。
  • Qオブジェクト: 複数条件のOR/AND検索を簡潔に記述できます。

補足情報

  • 日付フィルタリング: ltgtは、数値だけでなく日付や時間などにも使用可能です。
  • 複雑な条件: icontainsltなどを組み合わせることで、柔軟なクエリ構築が可能になります。

実務での活用例

私の実務経験では、これらのフィルタを使用して次のような検索条件を実装しました:

  • ユーザー名や会社名の部分一致検索。
  • 契約終了日が未設定のレコードの取得。

まとめ

  • 大文字小文字を区別しない検索にはicontains、区別する検索にはcontainsを使用。
  • 数値や日付の比較にはlt(未満)やgt(より大きい)を活用。
  • DjangoのORMは簡潔なコードで柔軟なクエリを実現可能。
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?