Ich habe ein Django-Modell mit zwei benutzerdefinierten Manager-Methoden. Jedes gibt eine andere Teilmenge der Objekte des Modells zurück, basierend auf einer anderen Eigenschaft des Objekts.
Gibt es eine Möglichkeit, ein Abfrageset oder nur eine Liste von Objekten abzurufen, dh die Vereinigung der von jeder Manager-Methode zurückgegebenen Abfragesätze?
python
django
django-models
Paul D. Waite
quelle
quelle
Antworten:
Das funktioniert und sieht etwas sauberer aus:
Wenn Sie keine Duplikate wollen, dann müssen Sie anfügen
.distinct()
:quelle
ManyToManyField
s manchmal zu falschen Ergebnissen führen . Zum Beispiel werden Sie manchmal sehen, dassrecords.count()
dies größer als istquery1.count() + query2.count()
, was eindeutig falsch ist.QuerySet
Klasse bietet Methoden für__and__
und__or__
die aufgerufen werden, wenn die Operatoren&
oder|
zwischen zweiQuerySet
Objekten verwendet werden (auch für dieQ
Klasse verwendet) ).Ab Version 1.11 verfügen Django-Abfragesätze über eine integrierte Vereinigungsmethode.
Weitere Beispiele finden Sie in meinem Blogbeitrag dazu.
quelle
Ich würde vorschlagen, 'query1.union (query2)' anstelle von 'query1 | zu verwenden query2 '; Ich habe unterschiedliche Ergebnisse mit den beiden oben genannten Methoden erzielt, und die erste ist das, was ich erwartet habe. Folgendes war mir begegnet:
Ergebnis:
quelle