Domanda

Ti stai solo chiedendo se esiste un modo semplice per aggiungere la funzionalità per duplicare un elenco esistente nell'interfaccia di amministrazione?

Nella registrazione dei dati ci siamo imbattuti in una situazione in cui molti articoli condividono dati generici con un altro oggetto e per risparmiare tempo sarebbe molto bello duplicare rapidamente un elenco esistente e modificare solo i dati modificati. L'uso di una struttura di modello migliore sarebbe un modo per ridurre la duplicazione dei dati, ma potrebbe esserci una situazione in cui i dati duplicati dovranno essere modificati su base individuale in futuro.

È stato utile?

Soluzione

Puoi salvare come semplicemente abilitando l'aggiunta di questo al ModelAdmin:

save_as = True

Questo sostituisce il " Salva e aggiungi un altro " con un pulsante " Salva come " pulsante. " Salva con nome " significa che l'oggetto verrà salvato come nuovo oggetto (con un nuovo ID) anziché come oggetto vecchio.

Altri suggerimenti

C'è una soluzione migliore (ma non integrata) qui:

https://github.com/RealGeeks/django-modelclone

Dal loro README:

  

Django Admin ha una funzione save_as che aggiunge un nuovo pulsante al tuo   Cambia pagina per salvare una nuova istanza di quell'oggetto.

     

Non mi piace il modo in cui questa funzione funziona perché salverai un file   copia identica dell'oggetto originale (se non si ottiene la convalida   errori) non appena si fa clic su quel collegamento e se si dimentica di effettuare il   piccole modifiche che volevi nel nuovo oggetto finirai con un   duplicato dell'oggetto esistente.

     

D'altra parte, django-modelclone offre una visione intermedia, quella   fondamentalmente pre-riempie il modulo per te. Quindi puoi modificare e quindi salvare   una nuova istanza. O semplicemente vai via senza effetti collaterali.

Puoi anche applicare questo metodo: https://stackoverflow.com/a/4054256/7995920

Nel mio caso, con un vincolo univoco nel campo "nome", questa azione funziona e può essere richiesta da qualsiasi modulo:


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)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top