Ich bin ein Dropdown mit Werten bevölkern in meinem models.py definiert, so etwas wie:Wie kann ich eine Django-Abfrage für eine benutzerdefinierte Werteliste anfordern?
rank_choices = (
('King', 'King')
('Prince', 'Prince')
('Duke', 'Duke')
('Baron', 'Baron')
('Lackey', 'Lackey')
Wenn ich zu einer bestimmten Zeit eine Liste von Personen mit einem Rang anzeigt, ich möchte, dass sie in erscheinen absteigender Rang.
Aktuelle Abfrage (nur alphabetisch):
attendees = Rank.objects.filter(feast__id=feast__id).exclude(rank='Lackey').order_by('rank')
Wie kann ich das ändern Rang durch seine Position in der Liste zu bestellen?
Ich erwäge dies:
rank_choices = (
(0, 'King')
(1, 'Prince')
(2, 'Duke')
(3, 'Baron')
(4, 'Lackey')
Aber selbst wenn ich die ausführlichen Werte wieder aus den numerischen Werten erhalten kann, wird alle Änderungen in der Reihenfolge vor der Änderung falsche Werte für Daten zurückkehren würden. Gibt es einen besseren Weg?
Lösung gewählt
von wim Antwort inspiriert, ich beendete eine Datenmigration bis machen die Reihen, um numerische Werte zu ändern und Sortierung wie folgt.
ranks = sorted(ranks, key=lambda x: int(x.rank))
Ich erhalte die ausführlichen Werte zurück, indem sie die rank_choices von meinen Modellen in meine Ansichten zu importieren und die numerischen Werte mit dem entsprechenden Titel nach der Sortierung zu ersetzen.
Danke. Ich werde es versuchen. Ich werde einige andere Attribute des Rank-Objekts und seiner fk-Objekte anzeigen müssen, aber vielleicht kann ich die Flat = 1 weglassen, multiple columns zu values_list geben und damit arbeiten. –
Ja, ändern Sie einfach das Argument, das im sortierten Aufruf an 'key' übergeben wird – wim
Können Sie keinen ORDER BY Ausdruck mit Django angeben? 'Reihenfolge nach Fall Rang, wenn 'König' dann 0, wenn 'Prinz' dann 1 ... Ende 'zum Beispiel. Mit SQL können Sie nach jedem gültigen Ausdruck und nicht nur nach Spalten sortieren. –