Can't perform Querying using Q objects

18 views
Skip to first unread message

Ajay M

unread,
Mar 11, 2015, 10:30:07 AM3/11/15
to django...@googlegroups.com

Hi I'm a newbie to Django. I'm trying to implement a search feature like this.

query_results = Shops.objects.filter\
                            (Q(shop_name__icontains=search_text)\
                            |Q(state__state_name__icontains=search_text)\
                            |Q(city__city_name__icontains=search_text)).distinct()

I would like to search Shops based on the shop_name, state_name and city_name. State and city fields are foreign keys. For some 'Shops' stateandcity are null. However, shop_name contains the search_text. So I'm not getting those 'Shops' by running this query. Any help on this is appreciated.

Vijay Khemlani

unread,
Mar 11, 2015, 10:52:55 AM3/11/15
to django...@googlegroups.com
At least when using Postgres that query makes a LEFT OUTER JOIN so it shouldn't discard Shops just because they don't have a state or city.

So your query seems to be OK

are you sure your search text is fine? the orm will not automatically strip the search_text into a list of keywords or things like that. For example, searching for "ski shop" will not match a Shop with name "ski super shop".

--
You received this message because you are subscribed to the Google Groups "Django users" group.
To unsubscribe from this group and stop receiving emails from it, send an email to django-users...@googlegroups.com.
To post to this group, send email to django...@googlegroups.com.
Visit this group at http://groups.google.com/group/django-users.
To view this discussion on the web visit https://groups.google.com/d/msgid/django-users/0c156715-b2fb-46ab-ad3d-d25235e7c4ca%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Ajay M

unread,
Mar 11, 2015, 12:19:11 PM3/11/15
to django...@googlegroups.com
Hi Vijay,
The search text is okay.. I think when  using the state__state_name and city__city_name relations Django INNER JOIN removes the shop without existing relation from the result.

Vijay Khemlani

unread,
Mar 11, 2015, 1:20:05 PM3/11/15
to django...@googlegroups.com
At least when I tested a similar query it makes an OUTER JOIN, not an INNER JOIN

What's the actual SQL command being executed?

print Shops.objects.filter(...).query



Reply all
Reply to author
Forward
0 new messages