17

使えますか

 MyClass.objects.get(description='hi').exclude(status='unknown')
4

2 に答える 2

27

exclude()の前にを実行すると、コードは期待どおりに機能しますget()

MyClass.objects.exclude(status='unknown').get(description='hi')

@Burhan Khalid が指摘しているように、呼び出しは.get、結果のクエリが 1 行だけを返す場合にのみ成功します。

Qオブジェクトを使用して、次のようにフィルターを直接指定することもでき.getます。

MyClass.objects.get(Q(description='hi') & ~Q(status='unknown'))

Q オブジェクトは、 a を使用するためにのみ必要であることに注意してください.exclude(また、Django の ORM には不等フィールド ルックアップがないため、 を使用する必要があります.exclude)。

.exclude元のコードが次の場合 (は に置き換えられていることに注意してください.filter):

MyClass.objects.filter(status='unknown').get(description='hi')

...簡単にできます:

MyClass.objects.get(status='unknown', description='hi')
于 2013-08-13T07:07:54.893 に答える
1

代わりに:

MyClass.objects.filter(description='hi').exclude(status='unknown')

.get()クエリMultipleObjectsReturnedの結果、一致するセットが複数ある場合に発生します。これは、主キーではないものを検索している場合に発生する可能性があります。

filter を使用すると QuerySet が得られ、後で他のメソッドとチェーンしたり、単にステップスルーして結果を取得したりできます。

于 2013-08-13T06:53:08.670 に答える