1
我試圖構建一個呈現搜索的Oscar產品的頁面,並使用GET屬性對它們的類別進行過濾。我重寫get_queryset,並從那裏建立我的對象列表Django Haystack:通過對象屬性進行篩選
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()
通過從結果對象的字段來過濾? (在這種情況下,產品對象的類別)
如果沒有,是否有一種有效的方法可以使用SearchQuerySet()
結果創建產品查詢集? 我已經試圖通過標識
object_ids = [result.object.id for result in sqs]
qs = qs.filter(id__in=object_ids).distinct()
過濾,但這裏有兩個問題:它是不可擴展的(如指出here)和一些疑問是,當我處理〜900分的結果很慢。
嗨!這麼晚纔回復很抱歉!這是有道理的,我不知道我怎麼沒有想到這一點。讓我測試解決方案,然後我馬上回到你身邊 –