2016-04-20 9 views
-1

Hier ist die rohe Abfrage gesetzt Django ORM:Django ORM: Anwenden auf rohe Abfrage der Bestellung setzt

ob = Shop.objects.raw('SELECT * from shops GROUP BY 
(duplicate_field_name) having COUNT(*) = 1 ORDER BY some_field') 

listorder = ["check_in","check_out","location"] 

Dieser listorder Teil dynamisch ist. Ich weiß nicht, wie es sein wird. Es ändert sich die Reihenfolge von Zeit zu Zeit & eine Sache kann nicht gelten, Bestellung auf rohen Abfrage setzt, weil ich die ganzen Daten für andere Zwecke wollen. Danach kann ich nur bestellen. Hier wollen Bestellung durch die Liste "listorder".

mObj = ob.order_by[*listorder].

In oben genannten Fehler kann nicht wie Reihenfolge auf Raw-Abfrage-Sets anwenden. Wer hat eine Idee?

+0

meinen Sie das check in, check out und die Lage sind Mitglieder des Shop-Modell, und Sie wollen die rohe resultset durch das bestellen? – e4c5

+0

Muss es Raw SQL sein? Vielleicht könntest du [Djangos extra() - Klausel] (https://docs.djangoproject.com/en/1.9/ref/models/querysets/#django.db.models.query.QuerySet.extra) verwenden, die ein order_by kwarg. – simP

Antwort

0

Wenn Sie möchten, dass ein unbearbeitetes Abfrage-Set nach verschiedenen Feldern sortiert wird, können Sie diese zur ORDER BY-Klausel hinzufügen.

ob = Shop.objects.raw('SELECT * from shops GROUP BY 
(duplicate_field_name) having COUNT(*) = 1 ORDER BY check_in, check_out, location') 

, wenn Sie die Bestellung wollen für ein bestimmtes Feld umgekehrt werden Sie es als

ob = Shop.objects.raw('SELECT * from shops GROUP BY 
(duplicate_field_name) having COUNT(*) = 1 ORDER BY check_in, check_out DESC, location') 

ändern können, wenn die Reihenfolge dynamisch sein wird, können Sie die Abfragezeichenfolgeflag dynamisch erstellen.

qs = ''SELECT * from shops GROUP BY 
(duplicate_field_name) having COUNT(*) = 1' 

# some other code here to decide what your ordering is example 
order_fields = ['id','location','check_in','check_out'] 

qs = qs + "ORDER BY " + ",".join(order_fields) 

Dann können Sie als Abfrage vor

Shop.objects.raw(qs) 
+0

Antwort aktualisiert. – e4c5

+0

gleiche Sache. Siehe ich habe eine Liste mit Spaltennamen, die von Zeit zu Zeit variieren. Ich weiß nicht, was drin ist. nur zum Verständnis hatte ich gegeben. Endlich habe ich eine Liste. Mit Hilfe der Liste möchte ich bestellen. Jetzt sag mir, wie ich mit Django ORM fortfahren kann. Ich hoffe, Sie erinnern sich an meine letzte Frage, um eindeutige Datensätze aus der Tabelle basierend auf einer bestimmten Spalte zu erhalten. Jetzt möchte ich Django ORM so, dass es alle Datensätze abrufen und dann die Bestellung mit Hilfe einer Liste (listorder) – danny

+0

anwenden Wenn Sie meine Frage nicht verstehen, dann sagen Sie mir mehr zu erklären. – danny

Verwandte Themen