#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.

Reply via email to