#34548: Queryset JsonField filtering doesn't work as expected
-------------------------------------+-------------------------------------
               Reporter:  Michael    |          Owner:  nobody
                   Type:  Bug        |         Status:  new
              Component:  Database   |        Version:  4.2
  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          |
-------------------------------------+-------------------------------------
 Hello. I use Django 4.2, psycopg2 2.9.6 and postgis/postgis:15-3.3-alpine
 as database in my project.

 Previously json field filtering worked as expected
 'extra_data__hello="world"' returned me queryset where objects extra_data
 json field contained {"hello": "world"}. Now I noticed queryset is empty.
 After some manipulations with query it start work after adding "iexact".

 I expected if json field is {"hello": "world"},
 objects.filter(extra_data__hello="world") or
 objects.filter(extra_data__hello=some_variable) should return this object
 in query set, but it doesn't work.
 objects.filter(extra_data__hello__iexact="world")  fix this problem.

 Here are queries example:
 {{{
 >>> token='world'
 >>>
 str(UserSocialAuth.objects.filter(extra_data__hello__exact=token).query)
 'SELECT "social_auth_usersocialauth"."id",
 "social_auth_usersocialauth"."user_id",
 "social_auth_usersocialauth"."provider",
 "social_auth_usersocialauth"."uid",
 "social_auth_usersocialauth"."extra_data",
 "social_auth_usersocialauth"."created",
 "social_auth_usersocialauth"."modified" FROM "social_auth_usersocialauth"
 WHERE ("social_auth_usersocialauth"."extra_data" -> hello) =
 \'"\\"world\\""\''
 >>>
 str(UserSocialAuth.objects.filter(extra_data__hello__iexact=token).query)
 'SELECT "social_auth_usersocialauth"."id",
 "social_auth_usersocialauth"."user_id",
 "social_auth_usersocialauth"."provider",
 "social_auth_usersocialauth"."uid",
 "social_auth_usersocialauth"."extra_data",
 "social_auth_usersocialauth"."created",
 "social_auth_usersocialauth"."modified" FROM "social_auth_usersocialauth"
 WHERE UPPER(("social_auth_usersocialauth"."extra_data" ->> hello)::text) =
 UPPER(world)'
 }}}

 Could you give me advice how to fix this issue?
 Thank you

-- 
Ticket URL: <https://code.djangoproject.com/ticket/34548>
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 django-updates+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/django-updates/01070187fce2780e-4b8e83d4-5d30-43c4-b45e-9ec5f8704838-000000%40eu-central-1.amazonses.com.

Reply via email to