使えますか
MyClass.objects.get(description='hi').exclude(status='unknown')
使えますか
MyClass.objects.get(description='hi').exclude(status='unknown')
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')
代わりに:
MyClass.objects.filter(description='hi').exclude(status='unknown')
.get()
クエリMultipleObjectsReturned
の結果、一致するセットが複数ある場合に発生します。これは、主キーではないものを検索している場合に発生する可能性があります。
filter を使用すると QuerySet が得られ、後で他のメソッドとチェーンしたり、単にステップスルーして結果を取得したりできます。