我们可以使用
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
只有在结果查询恰好返回一行时,调用才会成功。
您还可以使用该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
如果您的查询导致多个匹配集,则会引发;考虑到您正在搜索不是主键的内容,这很可能会发生。
使用过滤器将为您提供一个 QuerySet,您可以稍后将其与其他方法链接或简单地逐步获取结果。