#33705: IsNull-Lookup not usable
-------------------------------------+-------------------------------------
Reporter: Florian | Owner: nobody
Apolloner |
Type: Bug | Status: new
Component: Database | Version: dev
layer (models, ORM) |
Severity: Normal | Keywords:
Triage Stage: | Has patch: 0
Unreviewed |
Needs documentation: 0 | Needs tests: 0
Patch needs improvement: 0 | Easy pickings: 0
UI/UX: 0 |
-------------------------------------+-------------------------------------
The docs in
https://docs.djangoproject.com/en/4.0/ref/models/lookups/#django.db.models.Lookup
seem to suggest that
{{{
<lhs>__<lookup_name>=<rhs>
}}}
is somewhat equivalent to
{{{
<lookup_name>(<lhs>, <rhs>)
}}}
This does work for some lookups, but not for `IsNull`:
{{{
>>> from django.contrib.auth.models import User
>>> from django.db.models import F
>>> from django.db.models.lookups import GreaterThan, IsNull
>>> User.objects.filter(GreaterThan(F('pk'), 1000))
DEBUG 2022-05-13 10:45:10,907 utils 63853 (0.006) SELECT "auth_user"."id",
"auth_user"."password", "auth_user"."last_login",
"auth_user"."is_superuser", "auth_user"."username",
"auth_user"."first_name", "auth_user"."last_name", "auth_user"."email",
"auth_user"."is_staff", "auth_user"."is_active", "auth_user"."date_joined"
FROM "auth_user" WHERE "auth_user"."id" > (1000) LIMIT 21; args=(1000,);
alias=default
<QuerySet []>
>>> User.objects.filter(IsNull(F('pk'), True))
Traceback (most recent call last):
File "<console>", line 1, in <module>
File
"/home/florian/dev/bap/observer/server/__pypackages__/3.10/lib/django/db/models/manager.py",
line 85, in manager_method
return getattr(self.get_queryset(), name)(*args, **kwargs)
File
"/home/florian/dev/bap/observer/server/__pypackages__/3.10/lib/django/db/models/query.py",
line 1071, in filter
return self._filter_or_exclude(False, args, kwargs)
File
"/home/florian/dev/bap/observer/server/__pypackages__/3.10/lib/django/db/models/query.py",
line 1089, in _filter_or_exclude
clone._filter_or_exclude_inplace(negate, args, kwargs)
File
"/home/florian/dev/bap/observer/server/__pypackages__/3.10/lib/django/db/models/query.py",
line 1096, in _filter_or_exclude_inplace
self._query.add_q(Q(*args, **kwargs))
File
"/home/florian/dev/bap/observer/server/__pypackages__/3.10/lib/django/db/models/sql/query.py",
line 1502, in add_q
clause, _ = self._add_q(q_object, self.used_aliases)
File
"/home/florian/dev/bap/observer/server/__pypackages__/3.10/lib/django/db/models/sql/query.py",
line 1532, in _add_q
child_clause, needed_inner = self.build_filter(
File
"/home/florian/dev/bap/observer/server/__pypackages__/3.10/lib/django/db/models/sql/query.py",
line 1370, in build_filter
condition = filter_expr.resolve_expression(self,
allow_joins=allow_joins)
File
"/home/florian/dev/bap/observer/server/__pypackages__/3.10/lib/django/db/models/lookups.py",
line 174, in resolve_expression
c.rhs = self.rhs.resolve_expression(
AttributeError: 'bool' object has no attribute 'resolve_expression'
}}}
--
Ticket URL: <https://code.djangoproject.com/ticket/33705>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.
--
You received this message because you are subscribed to the Google Groups
"Django updates" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/django-updates/01070180bc9a8723-012c3374-e3c4-4343-b1b5-341d47d7a897-000000%40eu-central-1.amazonses.com.