質問

私は、フィルタを構築する方法を知っていると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のサポートを構文どのようなデータベースに依存しない、チェックはありませんが警告されます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top