【发布时间】:2017-09-18 16:12:52
【问题描述】:
我正在尝试构建一个页面,该页面呈现搜索到的 Oscar 产品并使用 GET 属性按其类别过滤它们。我正在覆盖 get_queryset 并从那里构建我的对象列表
class ProductSearchView(ListView):
model = Product
template_name = "productsearch/product_list.html"
queryset = Product.objects.none()
def get_queryset(self):
word_query_attr = self.request.GET.get('q', None) # word query
sqs = SearchQuerySet().models(Product).filter(Q(title__icontains=word_query_attr) |
Q(category__name__icontains=word_query_attr) |
Q(upc__icontains=word_query_attr) |
Q(description__icontains=word_query_attr))
qs = Product.objects.all()
if self.request.GET.get('cat', None):
cat_attr = self.request.GET.get('cat', None)
category = Category.objects.get(name=cat_attr)
qs = qs.filter(categories__in=category.get_children())
我的问题是,我可以使用SearchQuerySet() 过滤结果对象中的字段吗? (在这种情况下,来自 Product 对象的类别)
如果没有,有没有一种有效的方法可以使用SearchQuerySet() 结果创建产品查询集?
我试过通过 ID 过滤
object_ids = [result.object.id for result in sqs]
qs = qs.filter(id__in=object_ids).distinct()
但有两个问题:它不可扩展(如 here 所述),当我处理大约 900 个结果时,一些查询非常慢。
【问题讨论】:
标签: django django-haystack django-oscar