Development #59103
La recherche full text sur les items dans la vue des transactions provoque des ligne en doublon
Début:
29 novembre 2021
Echéance:
% réalisé:
0%
Temps estimé:
Patch proposed:
Oui
Planning:
Non
Description
Cf. une remarque dans #58853.
Le fait de recherche dans des objets liés par une table n-n provoque la multiplication des lignes de la table principale (ici Transaction lié à BasketItem par un champ M2M), dans ce code de TransactionListView.get_queryset() :
qs = ( Transaction.objects.select_related('user') .prefetch_related(Prefetch('items', to_attr='prefetched_items')) .filter(status__in=(eopayment.PAID, eopayment.ACCEPTED)) .order_by('-start_date') ) query, regie = None, None if self.form.is_valid(): query = self.form.cleaned_data['q'] regie = self.form.cleaned_data['regie'] if regie: qs = qs.filter(regie=regie) if query: try: date = date_parser.parse(query, dayfirst=True) except Exception: qs = qs.filter( Q(order_id=query) | Q(bank_transaction_id=query) | Q(items__subject__icontains=query) )
C'est Q(items__subject__icontains=query)
qui provoque une jointure avec la table M2M. Il faut ajouter .distinct()
pour s'en protéger.
Fichiers
Révisions associées
Historique
Mis à jour par Benjamin Dauvergne il y a plus de 2 ans
- Fichier 0001-lingo-use-distinct-when-querying-transactions-throug.patch 0001-lingo-use-distinct-when-querying-transactions-throug.patch ajouté
- Statut changé de Nouveau à Solution proposée
- Patch proposed changé de Non à Oui
Mis à jour par Serghei Mihai (congés, retour 15/05) il y a plus de 2 ans
- Statut changé de Solution proposée à Solution validée
Mis à jour par Benjamin Dauvergne il y a plus de 2 ans
- Statut changé de Solution validée à Résolu (à déployer)
commit d87a1895008115fecf898fc23905275d116ce0eb Author: Benjamin Dauvergne <bdauvergne@entrouvert.com> Date: Mon Nov 29 23:04:51 2021 +0100 lingo: use distinct when querying transactions through items (#59103)
Mis à jour par Frédéric Péters il y a plus de 2 ans
- Statut changé de Résolu (à déployer) à Solution déployée
lingo: use distinct when querying transactions through items (#59103)