Frage

Nur frage mich, ob es eine einfache Möglichkeit, die Funktionalität zu duplizieren eine bestehende Liste im Admin-Interface?

hinzufügen

In 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.

War es hilfreich?

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)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top