DjangoでフィルターとQオブジェクトを作成する方法は知っていますが、APIが提供する演算子を無効にする方法がわかりません。たとえば、contains演算子の場合、notcontainsのようなものが必要です。
例えば.
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
の場合、本当にfilter
を使用する必要がある場合は、Q(name__regex = r '!(SomeString)')を使用します。 regex
はデータベースに依存しないことに注意してください。最初に、データベースがサポートする構文を確認してください。