質問
私は、フィルタを構築する方法を知っているとQはジャンゴ内のオブジェクトが、私はAPIが提供する事業者を否定する方法がわからない、例えば私はnotcontainsような何かをしたいと思いオペレータが含まれています。
のために例えば。
q=Q(name__notcontains="SomeString")
これは私の名前が「SomeString」を含んでいないすべてのオブジェクトを取得します。
私が欠けていることをいくつかの構文がありますか?
ありがとうます。
解決
あなたはexclude()
の代わりに filter()
に使用することができます。
Entry.objects.exclude(name__contains="SomeString")
(SomeStringを ""私に含むnames
以外のすべてのエントリを与える")
のときQオブジェクトを扱うあなたが否定を表現するためにQオブジェクトの前に「〜」記号を使用することができます。たとえば、次の文の意味は 『SomeString『を含むが、NOT』象「をnames
を含むと私にすべてのエントリを与える』ます:
Entry.objects.filter(Q(name__contains="Elephant") & ~Q(name__contains="SomeString"))
いくつかのケースでは、両方の方法を使用する必要があります:
Entry.objects.exclude(Q(name__contains="Elephant") & ~Q(name__contains="SomeString"))
( "、私のすべてのエントリを与える含むnames
でものを除き、 "象" を、しかし含まない "SomeStringを")
他のヒント
ここでクエリセットAPIリファレンスのです。 exclude
のあなたがやりたいようです。
ハンクは(name__regex = R「!(SomeString)」)の使用Q、特定の
exclude
ケースのために、示唆するかのようにのいずれかを使用contains
あなたは本当にfilter
を使用する必要がある場合。そのregex
が最初にあなたのDBのサポートを構文どのようなデータベースに依存しない、チェックはありませんが警告されます。
所属していません StackOverflow