クエリセット内の空の名前または NULL の名前をフィルタリングするにはどうすればいいですか? 質問する

クエリセット内の空の名前または NULL の名前をフィルタリングするにはどうすればいいですか? 質問する

first_name検索する必要がある、last_name& (オプション) がありますalias。したがって、エイリアスが設定されているすべての名前を取得するクエリが必要です。

もし私ができるのであれば:

Name.objects.filter(alias!="")

では、上記に相当するものは何でしょうか?

ベストアンサー1

次のようにすることができます:

Name.objects.exclude(alias__isnull=True)

null 値と空の文字列を除外する必要がある場合は、次のように条件を連結するのが推奨されます。

Name.objects.exclude(alias__isnull=True).exclude(alias__exact='')

これらのメソッドを連結すると、基本的に各条件が個別にチェックされます。上記の例では、 がaliasnullまたはName空の文字列である行を除外するため、 null でも空でもないフィールドを持つすべてのオブジェクトが取得されますalias。生成される SQL は次のようになります。

SELECT * FROM Name WHERE alias IS NOT NULL AND alias != ""

への 1 回の呼び出しに複数の引数を渡すこともできます。これにより、すべてのexclude条件を満たすオブジェクトのみが除外されるようになります。

Name.objects.exclude(some_field=True, other_field=True)

ここでは、some_field other_fieldが true である行は除外されるため、両方のフィールドが true ではないすべての行が取得されます。生成された SQL コードは次のようになります。

SELECT * FROM Name WHERE NOT (some_field = TRUE AND other_field = TRUE)

あるいは、ロジックがそれよりも複雑な場合は、DjangoのQ オブジェクト:

from django.db.models import Q
Name.objects.exclude(Q(alias__isnull=True) | Q(alias__exact=''))

詳細についてはこのページそしてこのページDjango ドキュメントで。

余談ですが、私の SQL の例は単なる例えです。実際に生成される SQL コードはおそらく異なるものになるでしょう。Django クエリがどのように動作するかをより深く理解するには、実際に生成される SQL を確認してください。

おすすめ記事