Skip to main content
 首页 » 编程设计

python之有没有办法将 SearchQuerySet 转换为 objects.filter 返回的类型之Django

2024年08月25日2598°冷暖

我需要将 SearchQuerySet() (django-haystack) 对象转换为 objects.filter 返回的类型。然后我需要能够过滤它。

例如,如果有一个带有 Restaurant 模型对象的 SearchQuerySet(),我需要能够这样做:

1) 将其转换为 objects.filter 返回的类型 2) 能够过滤执行 1) 的结果,例如restaurant_locations= r.filter(location = "纽约")

我知道这听起来很傻,但我需要这个功能。任何见解表示赞赏

请您参考如下方法:

SearchQuerySet 是一个QuerySet,并且与QuerySet完全一样,但它基于您的字段在索引中设置,而不是在模型中设置。

因此,如果您的模型有字段 foo 而您的索引没有,则您不能执行 SearchQuerySet().filter(foo='thing')。

如果您不能将字段添加到索引,并且绝对必须对整个模型列表进行过滤,您可以像这样进行非常昂贵转换:

sqs = SearchQuerySet().get_some_results 
qs = Mymodel.filter(id__in=[result.obj.pk for result in sqs]) 
qs = qs.filter(foo="thing") 

但是,这遍历 SearchQuerySet 以获取所有主键,然后将整个列表传递回数据库以获取项目,然后您可以对其进行过滤。