Für Arbeitscode, um dies zu tun, finden Sie Schnipsel 1053 unter djangosnippets.org .
Hinweis zum "Es wäre am besten, wenn ich dem Modell keine zusätzlichen Felder hinzufügen müsste, aber wenn ich es wirklich kann."
Entschuldigung, aber die Reihenfolge der Informationen in einer Datenbank wird durch die Information selbst bestimmt: Sie müssen immer eine Spalte für die Bestellung hinzufügen. Da gibt es wirklich keine Wahl.
Um Dinge in dieser Reihenfolge abzurufen, müssen Sie außerdem .order_by(x)
zu Ihren Abfragen hinzufügen oder ordering
zu Ihrem Modell hinzufügen.
Ohne das zusätzliche Feld kann die Reihenfolge nicht passieren. Es ist eine der Regeln relationaler Datenbanken.
Heutzutage gibt es ein nettes Paket zum Bestellen von Admin-Objekten
Auch django-suit hat dafür eine Unterstützung eingebaut
In der Modellklasse müssten Sie wahrscheinlich das Feld "order" hinzufügen, um eine bestimmte Reihenfolge zu erhalten (zB Artikel mit der Reihenfolge = 10 ist der letzte und Auftrag = 1 ist der erste). Dann können Sie einen JS-Code in der Admin-Tabelle change_list hinzufügen (siehe dies ), um die Drag & amp; Drop-Funktion beizubehalten. Ändern Sie schließlich die Reihenfolge in Meta des Modells zu etwas wie ['order'].
Sie können dieses Snippet versuchen Ссылка (ursprünglich basierend auf diesem Snippet Ссылка ).
Die Integration ist sehr einfach.
Ihr Modell (in models.py):
%Vor%Sie admin (admin.py):
%Vor%Ändern Sie das JS (des Snippets) entsprechend, wenn Ihre Attribute, die für den Namen und die Reihenfolge verantwortlich sind, in Ihrem Modell anders benannt sind.
Die Reihenfolge kann nur bestimmt werden, wenn Sie ein Feld in Ihrem Modell hinzufügen. Fügen Sie ein Positionsfeld in Ihrem Modell hinzu.
%Vor% ordering = ('position',)
in Meta ordnet das MainModel entsprechend dem Wert im Positionsfeld an.
sortable_field_name = "position"
hilft beim automatischen Ausfüllen des Werts in Position, wenn ein Benutzer die mehreren Modelle per Drag & Drop bewegt.
Um die gleiche Reihenfolge in Ihrer API zu sehen, verwenden Sie order_by (x) in views_model.py. Nur ein Modellbeispiel:
%Vor%Tags und Links python django javascript