J'ai un modèle Django avec deux méthodes de gestion personnalisées. Chacune renvoie un sous-ensemble différent des objets du modèle, basé sur une propriété différente de l'objet.
Existe-t-il un moyen d'obtenir un ensemble de requêtes, ou simplement une liste d'objets, qui est l'union des ensembles de requêtes retournés par chaque méthode de gestionnaire?
Cela fonctionne et semble un peu plus propre:
records = query1 | query2
Si vous ne voulez pas de doublons, vous devrez ajouter .distinct()
:
records = (query1 | query2).distinct()
À partir de version 1.11 , Django ont une méthode d'union intégrée.
q = q1.union(q2) #q will contain all unique records of q1 + q2
q = q1.union(q2, all=True) #q will contain all records of q1 + q2 including duplicates
q = q1.union(q2,q3) # more than 2 queryset union
Voir mon article de blog à ce sujet pour plus d'exemples.