J'essaye de construire une page qui rende des produits recherchés d'oscars et les filtre par leur catégorie en utilisant des attributs de GET. Je suis remplaçant get_queryset et la construction de ma liste d'objets à partir de làDjango Haystack: Filtrage par propriétés d'objet
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())
Ma question est, puis-je utiliser SearchQuerySet()
pour filtrer à travers les champs à partir d'objets de résultat? (dans ce cas, les catégories des objets Product)
Sinon, y a-t-il un moyen efficace de créer un jeu de résultats produit en utilisant les résultats SearchQuerySet()
? J'ai essayé filtrage par ID
object_ids = [result.object.id for result in sqs]
qs = qs.filter(id__in=object_ids).distinct()
Mais il y a deux problèmes: il n'est pas évolutive (comme indiqué here) et certaines requêtes sont très lents quand je fais face à 900 ~ résultats.
Bonjour! Désolé pour la réponse tardive! C'est logique, je ne sais pas comment je n'ai pas pensé à ça. Laisse-moi tester la solution et je reviendrai vers toi –