Ich verwende ein django-mptt-Paket für meine Kommentaranwendung und ich habe folgendes Modell dafür:
%Vor% Ich möchte dem Benutzer die Möglichkeit geben, den Kommentarbaum nach der Schärfe oder dem Erstellungsdatum zu sortieren. Ist es möglich, das order_insertion_by
-Feld aus der Sicht zu bearbeiten, um 2 Sortierarten zu erzeugen (nach Datum, nach Schärfe)? Danke für deine Hilfe.
Die Modified Preorder Tree Traversal
(MPTT) ist eine Möglichkeit, eine Baumstruktur mit einer Abfrage mit linker ( lft
in mpt) und rechter ( rgt
) Nummerierung wie hier gezeigt zu erhalten Ссылка .
Das Definieren von mehr als einer order_insertion_by wird folgendes tun (gemäß den Kommentaren von mpts):
%Vor% Wenn ich es richtig verstehe, gibt order_insertion_by
die Reihenfolge der Geschwister an, die Kinder (nicht Nachkommen) eines Elternelements darstellen. Wenn Sie zwei verschiedene Ordnungen haben möchten, müssten sich auch lft
und rgt
ändern und somit ist es ein zweiter Baum. Dies ist nicht in mpt enthalten.
Sie könnten immer noch tun
%Vor%aber Sie würden die Baumstruktur verlieren. Es ist im Allgemeinen nicht möglich, die Baumstruktur beizubehalten und den gesamten Baum durch etwas anderes zu ordnen, z. Schärfe. Stellen Sie sich vor, Sie haben folgendes:
%Vor%was zu
führen würde %Vor% Es ist geordnet, aber Comment2
ist nicht an Comment1
angehängt.
Wenn Sie nach etwas anderem als% order_insertion_by
auf Geschwisterebene sortieren möchten, erhalten Sie Folgendes:
kann man ein neues Template-Tag wie {% recursetree objects -hotness %}
schreiben, das children
elements iteriert und neu sortiert und den neuen Baum zurückgibt. Es ist immer noch eine Datenbankabfrage - aber ich kann den Leistungseinbruch nicht schätzen.
Sie müssen mptt abzweigen und mptt_tags.py
wie folgt bearbeiten:
Tags und Links python django django-mptt