查询使用Q对象

时间:2015-03-11 14:26:06

标签: django django-models django-queryset django-q

嗨,我是Django的新手。我试图实现这样的搜索功能。

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()

我想根据Shopsshop_name, state_name搜索city_name。州和城市字段是外键。 对于某些'Shops' statecity为空。但是,shop_name包含search_text。所以我没有得到那些' Shops'通过运行此查询。 对此有任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:0)

我怀疑当你使用state__state_namecity__city_name关系时,Django会对这些表格INNER JOIN。内部联接从结果中删除没有现有关系的商店。

作为此问题的解决方法,您可以尝试以下方法:

states = State.objects.filter(state_name__icontains=search_text)
cities = City.objects.filter(city_name__icontains=search_text)
query_results = Shops.objects.filter(Q(shop_name__icontains=search_text)
                                    |Q(state__in=states)
                                    |Q(city__in=cities)).distinct()