使用 Q 对象查询

Querying using Q objects

大家好,我是 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()

我想根据 shop_name, state_namecity_name 搜索 Shops。州和城市字段是外键。 对于某些 'Shops' statecity 为空。但是,shop_name 包含 search_text。所以我没有通过 运行 这个查询得到那些 'Shops'。 感谢您对此提供任何帮助。

我怀疑当您使用 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()