#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 [email protected].
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