In der Schnittstelle Django admin, gibt es eine Möglichkeit, ein Element zu duplizieren?
-
05-07-2019 - |
Frage
Nur frage mich, ob es eine einfache Möglichkeit, die Funktionalität zu duplizieren eine bestehende Liste im Admin-Interface?
hinzufügenIn der Dateneingabe haben wir in eine Situation kommen, wo viele Elemente allgemeine Daten mit einem anderen Element teilen und Zeit zu sparen, es wäre sehr schön, schnell eine vorhandene Liste zu duplizieren und nur die geänderten Daten verändern. eine bessere Modellstruktur unter Verwendung wäre eine Möglichkeit, die Vervielfältigung der Daten zu reduzieren, aber es kann Situation geben, in denen die duplizierte Daten auf individueller Basis in Zukunft geändert werden muss.
Lösung
Sie können href="http://docs.djangoproject.com/en/dev/ref/contrib/admin/#django.contrib.admin.ModelAdmin.save_as" speichern von nur ermöglicht, diese zu Ihrer Modeladmin:
save_as = True
Dies ersetzt die „Speichern und eine weitere hinzufügen“ Taste mit einem „Speichern unter“ -Schaltfläche. „Speicher unter“ bedeutet, wird das Objekt als neues Objekt gespeichert werden (mit einer neuen ID), anstatt dem alten Objekt.
Andere Tipps
Es gibt eine bessere (aber nicht eingebaut) Lösung hier:
https://github.com/RealGeeks/django-modelclone
Aus ihrer README:
Django Admin hat eine
save_as
-Funktion, die eine neue Schaltfläche fügt Ihre Ändern Seite eine neue Instanz des Objekts zu speichern.Ich mag nicht die Art und Weise diese Funktion funktioniert, weil Sie eine sparen identische Kopie des ursprünglichen Objekts (wenn Sie nicht bekommen, Validierung Fehler), sobald Sie auf diesen Link klicken, und wenn Sie das vergessen zu kleine Änderungen, die Sie in dem neuen Objekt gesucht werden Sie mit einem Ende Duplikat des vorhandenen Objekts.
Auf der anderen Seite, django-modelclone bietet eine Zwischen Ansicht, dass grundsätzlich vorge füllt das Formular für Sie. So können Sie ändern und speichern eine neue Instanz. Oder einfach weggehen, ohne Nebenwirkungen.
Sie können auch diese Methode anwenden: https://stackoverflow.com/a/4054256/7995920
In meinem Fall mit eindeutiger Einschränkung im Feld ‚Namen‘, diese Aktion funktioniert, und kann von jeder Form angefordert werden:
def duplicate_jorn(modeladmin, request, queryset):
post_url = request.META['HTTP_REFERER']
for object in queryset:
object.id = None
object.name = object.name+'-b'
object.save()
return HttpResponseRedirect(post_url)