django でフィルターと Q オブジェクトを作成する方法は知っていますが、API が提供する演算子を無効にする方法がわかりません。
例えば
q=Q(name__notcontains="SomeString")
これにより、名前に「SomeString」が含まれていないすべてのオブジェクトが取得されます。
不足している構文はありますか?
ありがとうございました。
exclude()
次の代わりに使用できますfilter()
。
Entry.objects.exclude(name__contains="SomeString")
names
(「 "SomeString"を含むエントリを除くすべてのエントリを教えてください)
また、Q オブジェクトを扱う場合、Q オブジェクトの前に "~" 記号を使用して否定を表すことができます。たとえば、次のステートメントは、names
「"Elephant" を含み、"SomeString" を含まないすべてのエントリを教えてください」を意味します。
Entry.objects.filter(Q(name__contains="Elephant") & ~Q(name__contains="SomeString"))
場合によっては、両方の方法を使用したい場合があります。
Entry.objects.exclude(Q(name__contains="Elephant") & ~Q(name__contains="SomeString"))
names
(「 「Elephant」を含み、「SomeString」を含まないものを除く、すべてのエントリを教えてください)
QuerySet API リファレンスは次のとおりです。exclude
あなたが望むことをするようです。
exclude
ハンクが提案するように使用するか、特定のcontains
ケースでは、本当に本当に使用する必要がある場合は Q(name__regex=r'!(SomeString)') を使用してfilter
ください。これはデータベースに依存しないことに注意してregex
ください。最初にデータベースがサポートする構文を確認してください。