38

django でフィルターと Q オブジェクトを作成する方法は知っていますが、API が提供する演算子を無効にする方法がわかりません。

例えば

q=Q(name__notcontains="SomeString")

これにより、名前に「SomeString」が含まれていないすべてのオブジェクトが取得されます。

不足している構文はありますか?

ありがとうございました。

4

3 に答える 3

87

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」を含まないものを除く、すべてのエントリを教えてください)

于 2010-02-03T19:59:37.407 に答える
5

QuerySet API リファレンスは次のとおりです。excludeあなたが望むことをするようです。

于 2010-02-03T19:47:53.930 に答える
2

excludeハンクが提案するように使用するか、特定のcontainsケースでは、本当に本当に使用する必要がある場合は Q(name__regex=r'!(SomeString)') を使用してfilterください。これはデータベースに依存しないことに注意してregexください。最初にデータベースがサポートする構文を確認してください。

于 2010-02-03T20:13:05.187 に答える