gpt4 book ai didi

django - 特定 Django 模型的高级搜索

转载 作者:行者123 更新时间:2023-12-02 17:55:58 26 4
gpt4 key购买 nike

我知道全文搜索应用程序,如 Django Solr和 solango 等

我想要构建的内容更类似于房地产网站的高级搜索。例如,他们可以选择位置、价格等,类似于 www.viewr.com高级搜索。

到目前为止,我在模型自定义管理器下所做的是:

def advanced_search(self, district, location, type, facilities, features, not_permitted):
q_objects = []
l_objects = []
t_objects = []
fc_objects = []
ft_objects = []
np_objects = []

if district:
if location:
for loc in location:
l_objects.append(Q(location__exact=loc))
else:
l_objects.append(Q(location__district=district))


if type:
for ty in type:
t_objects.append(Q(listing_type__exact=ty))

if facilities:
for fc in facilities:
fc_objects.append(Q(property_facilities__exact=fc))

if features:
for ft in features:
ft_objects.append(Q(property_features__exact=ft))
ft_objects.append(Q(community_features__exact=ft))

if not_permitted:
for np in not_permitted:
np_objects.append(Q(not_permitted__exact=np))

# Start with a bare QuerySet
qs = self.get_query_set()

if location:
qs = qs.filter(reduce(operator.or_, l_objects))
if type:
qs = qs.filter(reduce(operator.or_, t_objects))
if facilities:
qs = qs.filter(reduce(operator.or_, fc_objects))
if features:
qs = qs.filter(reduce(operator.or_, ft_objects))
if not_permitted:
qs = qs.filter(reduce(operator.or_, np_objects))
# Use operator's or_ to string together all of your Q objects.
return qs

现在我没有得到非常可预测的结果。我可能做错了什么吗?有没有更好的方法来进行各种 OR 搜索/连接?

最佳答案

只是一些想法。

在这种情况下,使用 kwargs 解包为过滤器方法提供参数非常有用。像这样的东西可以使代码更简单:

kwargs = {'not_permitted':np,'property_features': ft}
return qs.filter(**kwargs)

也许你应该看看 django 在 admin 中的过滤代码。在 django 管理参数中,例如 not_permissed__exact 是通过 GET 传递的。然后,经过一些过滤后,整个 GET 字典可以作为解压的 kwargs 参数传递给过滤方法。当您有很多过滤器选项时,这会使事情变得非常简单。

关于django - 特定 Django 模型的高级搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/972929/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com