1. ホーム
  2. python

[解決済み】Djangoのクエリセットフィルタリングでnot equalを行うにはどうすればよいですか?

2022-02-18 23:39:37

質問

DjangoのモデルのQuerySetsには __gt__lt を比較対象としていますが __ne または != ( ノットイコール )? not equals を使ってフィルタリングしたいのですが。例えば、以下のような場合です。

Model:
    bool a;
    int x;

を行いたい。

results = Model.objects.exclude(a=True, x!=5)

!= は正しい構文ではありません。また __ne .

結局使ったのは

results = Model.objects.exclude(a=True, x__lt=5).exclude(a=True, x__gt=5)

解決方法は?

を使用することができます。 Qオブジェクト を使用します。これらは ~ 演算子を使って、通常のPythonの式と同じように組み合わせることができます。

from myapp.models import Entry
from django.db.models import Q

Entry.objects.filter(~Q(id=3))

を除いたすべてのエントリを返します。 3 をIDとして指定します。

[<Entry: Entry object>, <Entry: Entry object>, <Entry: Entry object>, ...]