我正在使用 Django 3.1 ORM 并且正在运行(使用pytest
)一个涉及复杂嵌套查询的测试。我得到了这个失败:
self = <django.db.models.expressions.Subquery object at 0x0000027CE184D2B0>
lookup = 'lte'
def get_lookup(self, lookup):
> return self.output_field.get_lookup(lookup)
E TypeError: get_lookup() missing 1 required positional argument: 'lookup_name'
get_lookup(lookup)
要调用的定义(据我所知)django.db.models.query_utils.RegisterLookupMixin
为
def get_lookup(self, lookup_name):
...
我的测试的相应源语句涉及类似
value = now() - OuterRef(OuterRef('myattr2')) * timedelta(days=1)
queryset2.annotate(has_x=Exists(queryset.filter(myattr__lte=value)))
并且围绕它有更多的查询构造代码。
我的调试器告诉我这self.output_field
是一个DateTimeField
对象。
所以总的来说:
- 上下文是一个
Exists
子查询。 - 查找是
'lte'
(如预期的那样)。 - 该调用提供
DateTimeField
asself
(fromoutput_field
) 和'lte'
aslookup_name
。 - 被调用的方法期望
self
和lookup_name
。
通话应该有效,不是吗?
在哪里TypeError
?