cod*_*ape 19

如果您执行以下操作exclude()之前,您的代码将按预期工作get():

MyClass.objects.exclude(status='unknown').get(description='hi')
Run Code Online (Sandbox Code Playgroud)

正如@Burhan Khalid指出的那样,.get只有在结果查询返回一行时,调用才会成功.

您还可以使用该Q对象直接在以下位置指定过滤器.get:

MyClass.objects.get(Q(description='hi') & ~Q(status='unknown'))
Run Code Online (Sandbox Code Playgroud)

请注意,Q对象仅是必需的,因为您使用了.exclude(并且Django的ORM没有不相等的字段查找,因此您必须使用.exclude).

如果您的原始代码已经存在(请注意.exclude已替换为.filter):

MyClass.objects.filter(status='unknown').get(description='hi')
Run Code Online (Sandbox Code Playgroud)

......你可以这样做:

MyClass.objects.get(status='unknown', description='hi')
Run Code Online (Sandbox Code Playgroud)