Django-Abfrage für Zeilen mit doppelten Feldwerten
Angenommen, wir haben ein Django-Modell mit einem nicht eindeutigen Feld. Wir müssen alle Zeilen aus dem Modell auswählen, die mindestens einen doppelten Wert für dieses Feld haben.
Einfacher SQL-Ansatz
Eine mögliche Lösung ist die Verwendung von einfachem SQL:
SELECT * FROM literal WHERE name IN ( SELECT name FROM literal GROUP BY name HAVING COUNT(*) > 1 );
Django ORM-Ansatz
Verwenden Djangos ORM können wir das gleiche Ergebnis mit einer Kombination aus value(), annotate(), order_by() und filter() erzielen:
from django.db.models import Count dupes = Literal.objects.values('name') \ .annotate(Count('id')) \ .order_by() \ .filter(id__count__gt=1)
Da der obige Code ein ValuesQuerySet zurückgibt, müssen wir dies tun Konvertieren Sie es in ein reguläres QuerySet, um es als Filter zu verwenden:
duplicates = Literal.objects.filter(name__in=[item['name'] for item in dupes])
Dieser Ansatz stellt sicher, dass wir nur Zeilen mit doppelten Namenswerten auswählen.
Das obige ist der detaillierte Inhalt vonWie finde ich Zeilen mit doppelten Feldwerten mithilfe von Django ORM?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!