Opened 19 months ago

Last modified 19 months ago

#34548 closed Bug

Queryset JsonField filtering doesn't work as expected — at Version 1

Reported by: Michael Owned by: nobody
Component: Database layer (models, ORM) Version: 4.2
Severity: Normal Keywords:
Cc: Triage Stage: Unreviewed
Has patch: no Needs documentation: no
Needs tests: no Patch needs improvement: no
Easy pickings: no UI/UX: no

Description (last modified by Michael)

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_datahelloiexact="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

Change History (1)

comment:1 by Michael, 19 months ago

Description: modified (diff)

code fixes

Note: See TracTickets for help on using tickets.
Back to Top