Ich bin gespannt, ob es in Django eine Möglichkeit gibt, eine Abfrage durchzuführen, die kein " SELECT * FROM...
" darunter ist. Ich versuche SELECT DISTINCT columnName FROM ...
stattdessen ein " " zu machen.
Insbesondere habe ich ein Modell, das aussieht wie:
class ProductOrder(models.Model):
Product = models.CharField(max_length=20, promary_key=True)
Category = models.CharField(max_length=30)
Rank = models.IntegerField()
wo das Rank
ist ein Rang innerhalb eines Category
. Ich möchte in der Lage sein, alle Kategorien zu durchlaufen, wobei für jeden Rang innerhalb dieser Kategorie eine Operation ausgeführt wird.
Ich möchte zuerst eine Liste aller Kategorien im System erhalten und dann alle Produkte in dieser Kategorie abfragen und wiederholen, bis jede Kategorie verarbeitet ist.
Ich würde lieber rohes SQL vermeiden, aber wenn ich dorthin muss, wäre das in Ordnung. Obwohl ich noch nie zuvor Raw SQL in Django / Python codiert habe.
Es ist eigentlich ganz einfach, wenn Sie PostgreSQL verwenden , verwenden Sie einfach
distinct(columns)
( Dokumentation ).Beachten Sie, dass diese Funktion seit 1.4 in Django enthalten ist
quelle
can_distinct_on_fields
scheint dies nur Postgres zu seinall()
hier nicht notwendigDie anderen Antworten sind in Ordnung, aber dies ist insofern etwas sauberer, als es nur die Werte angibt, die Sie von einer DISTINCT-Abfrage erhalten würden, ohne dass Crj von Django verwendet wird.
oder
Und es funktioniert ohne PostgreSQL.
Dies ist weniger effizient als die Verwendung von .distinct (), vorausgesetzt, DISTINCT in Ihrer Datenbank ist schneller als eine Python
set
, eignet sich jedoch hervorragend zum Nudeln in der Shell.quelle
values_list
wird nichtDISTINCT
in die SQL-Abfrage eingefügt, daher würde dies mehrere Werte bringen, wenn dies der Fall wäre.Benutzer bestellen mit diesem Feld und dann unterscheiden.
quelle