Dynamische Reihenfolge in django-mptt

9

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.

    
Peterek 10.07.2015, 13:01
quelle

1 Antwort

3

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:

%Vor%

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:

%Vor%     
biodiv 27.08.2015, 07:46
quelle

Tags und Links