我需要将 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 以获取所有主键,然后将整个列表传递回数据库以获取项目,然后您可以对其进行过滤。
