2016-07-07 6 views
1

Fオブジェクトを使用してDjangoモデルにクエリを実行しようとしましたが、目的の結果が得られませんでした。 クエリは次のとおりです。としてORMによってSQLに翻訳されDjangoのFオブジェクトとの比較クエリの追加null以外のチェックの追加

Ticket.objects.exclude(lead__email=F('email')).count()

SELECT count(*) FROM "core_ticket" LEFT OUTER JOIN "core_lead" ON ("core_ticket"."lead_id" = "core_lead"."id") WHERE NOT ("core_lead"."email" = ("core_ticket"."email") AND "core_lead"."email" IS NOT NULL)

私の問題は、ORMは、where句でこのAND "core_lead"."email" IS NOT NULLを追加することです。電子メールフィールドにnull値が存在する可能性があるため、結果に影響しています。

この特別なヌルチェックを避ける方法はありますか?

答えて

0

メールのモデル定義にはnull=Trueが必要です。したがって、これを修正する最も簡単な方法は、そのnull=Trueを削除し、移行してからもう一度やり直すことです。したがって、電子メールが「なし」の場合、Noneの代わりに''になり、F()が機能します。

もう1つの方法はQ()クエリを使用することですが、これはPythonメモリのコストがかかります。

関連する問題