I am working with Django 3.1 ORM and am running (with pytest
) a test involving a complex nested query. I get this failure:
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'
That get_lookup(lookup)
to be called is defined (as far as I can see) in django.db.models.query_utils.RegisterLookupMixin
as
def get_lookup(self, lookup_name):
...
The corresponding source statement of my test involves something like
value = now() - OuterRef(OuterRef('myattr2')) * timedelta(days=1)
queryset2.annotate(has_x=Exists(queryset.filter(myattr__lte=value)))
and there is more query construction code around it.
My debugger tells me that self.output_field
is a DateTimeField
object.
So overall:
- The context is an
Exists
subquery. - The lookup is
'lte'
(as intended). - The call provides a
DateTimeField
asself
(fromoutput_field
) and'lte'
aslookup_name
. - The method-to-be-called expects
self
andlookup_name
.
The call should work, shouldn't it?
Where is the TypeError
?