Question

Je me demandais s'il existait un moyen facile d'ajouter la fonctionnalité permettant de dupliquer une liste existante dans l'interface d'administration?

Lors de la saisie des données, nous avons rencontré une situation dans laquelle de nombreux éléments partagent des données génériques avec un autre élément. Pour gagner du temps, il serait très agréable de dupliquer rapidement une liste existante et de ne modifier que les données modifiées. Utiliser une meilleure structure de modèle serait un moyen de réduire la duplication des données, mais il peut arriver que les données dupliquées doivent être modifiées individuellement à l'avenir.

Était-ce utile?

La solution

Vous pouvez enregistrer sous en activant simplement l'ajout de ceci à votre ModelAdmin:

save_as = True

Ceci remplace les options "Enregistrer et ajouter un autre". bouton avec un " Enregistrer sous " bouton. " Enregistrer sous " signifie que l'objet sera enregistré en tant que nouvel objet (avec un nouvel ID), plutôt que l'ancien objet.

Autres conseils

Il existe une meilleure solution (mais pas intégrée) ici:

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

À partir de leur fichier README:

  

Django Admin a une fonctionnalité save_as qui ajoute un nouveau bouton à votre   Changer de page pour enregistrer une nouvelle instance de cet objet.

     

Je n'aime pas le fonctionnement de cette fonctionnalité car vous économiserez un   copie identique de l'objet d'origine (si vous ne recevez pas de validation   erreurs) dès que vous cliquez sur ce lien, et si vous oubliez de faire la   petits changements que vous vouliez dans le nouvel objet, vous vous retrouverez avec un   dupliquer l'objet existant.

     

D'autre part, Django-modelclone offre une vue intermédiaire, qui   fondamentalement pré-remplit le formulaire pour vous. Ainsi, vous pouvez modifier puis sauvegarder   une nouvelle instance. Ou simplement partir sans effets secondaires.

Vous pouvez également appliquer cette méthode: https://stackoverflow.com/a/4054256/7995920

Dans mon cas, avec une contrainte unique dans le champ "nom", cette action fonctionne et peut être demandée à partir de n’importe quel formulaire:

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)
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top