Django-tables2: Erlauben Sie absteigend sortierten Spalten, leere Werte am Ende der Spalte zu platzieren

Erstellt am 2. Aug. 2018  ·  6Kommentare  ·  Quelle: jieter/django-tables2

Bei der Arbeit mit absteigenden Spalten in #595 und #597 bin ich auf ein absteigendes Sortierverhalten gestoßen, das ein wenig abwegig erscheint.

Betrachten Sie einen Datensatz wie diesen:

| Aufnahme | Wert |
| --- | --- |
| A | 3 |
| B | 1 |
| C | - |
| D | - |

Beim Sortieren der Wertspalte in aufsteigender Reihenfolge werden die leeren Werte an das Ende der Liste verschoben:

| Aufnahme | Wert |
| --- | --- |
| B | 1 |
| A | 3 |
| C | - |
| D | - |

Beim Sortieren in absteigender Reihenfolge werden die leeren Werte jedoch oben in der Liste platziert:

| Aufnahme | Wert |
| --- | --- |
| C | - |
| D | - |
| A | 3 |
| B | 1 |

In einigen Fällen möchte ein Benutzer die leeren Werte beim Sortieren in absteigender Reihenfolge "ignorieren" und sie dadurch an das Ende der Liste verschieben, genau wie beim Aufsteigen. Kann dies getan werden?

Hilfreichster Kommentar

Hah, nun, ich habe mir vielleicht die Notwendigkeit einer PR ausgeredet. In meinem Beispielfall kann das gewünschte Verhalten order_FOO() Methode nulls_last Django erreicht werden. Wie so:

def order_value(self, QuerySet, is_descending): if is_descending: QuerySet = QuerySet.order_by(F('value').desc(nulls_last = True)) else: QuerySet = QuerySet.order_by(F('value').asc(nulls_last = True)) return (QuerySet,True)

Dies führt dazu, dass Nullwerte immer am Ende der Spalte sortiert werden. Dies funktioniert in den Fällen, in denen ich es brauche, da ich sicherstellen kann, dass meine Datenbank immer null für leere Werte verwendet.

Ich habe diese Lösung für Fälle getestet, in denen die Werte einfach leer sind und sie nicht funktioniert. Ich vermute, dass eine Lösung gefunden werden könnte, indem man etwas innerhalb des Verhaltens von django-tables2 order_by ändert, aber wenn wir sowieso über einen Randfall sprechen, vielleicht die Sortierung mit Nullen-letzten order_FOO() Workaround ist besser, als mit der Quelle herumzuspielen.

In jedem Fall kann ich meine Anfrage als abgeschlossen betrachten. Wenn jemand anderes verlangt, streng leere Werte auf die gleiche Weise zu behandeln, kann vielleicht eine PR überdacht werden.

Alle 6 Kommentare

Hast du #529 gesehen?

Oh, ich sehe es jetzt. Hm, vielleicht kann ich auch mal eine PR dafür machen.

Wäre sehr willkommen!

Hah, nun, ich habe mir vielleicht die Notwendigkeit einer PR ausgeredet. In meinem Beispielfall kann das gewünschte Verhalten order_FOO() Methode nulls_last Django erreicht werden. Wie so:

def order_value(self, QuerySet, is_descending): if is_descending: QuerySet = QuerySet.order_by(F('value').desc(nulls_last = True)) else: QuerySet = QuerySet.order_by(F('value').asc(nulls_last = True)) return (QuerySet,True)

Dies führt dazu, dass Nullwerte immer am Ende der Spalte sortiert werden. Dies funktioniert in den Fällen, in denen ich es brauche, da ich sicherstellen kann, dass meine Datenbank immer null für leere Werte verwendet.

Ich habe diese Lösung für Fälle getestet, in denen die Werte einfach leer sind und sie nicht funktioniert. Ich vermute, dass eine Lösung gefunden werden könnte, indem man etwas innerhalb des Verhaltens von django-tables2 order_by ändert, aber wenn wir sowieso über einen Randfall sprechen, vielleicht die Sortierung mit Nullen-letzten order_FOO() Workaround ist besser, als mit der Quelle herumzuspielen.

In jedem Fall kann ich meine Anfrage als abgeschlossen betrachten. Wenn jemand anderes verlangt, streng leere Werte auf die gleiche Weise zu behandeln, kann vielleicht eine PR überdacht werden.

Danke fürs Erklären!

danke für diesen netten Workaround @foldedpaper :)

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen

Verwandte Themen

blite picture blite  ·  3Kommentare

applegrew picture applegrew  ·  17Kommentare

brianmay picture brianmay  ·  6Kommentare

mpasternak picture mpasternak  ·  9Kommentare

wtfrank picture wtfrank  ·  32Kommentare