Réponses
Trop de publicités?La documentation de Django pour les requêtes de base de données comprend une section sur la copie d'instances de modèle. En supposant que vos clés primaires sont générés automatiquement, l'idée est de définir la clé primaire à Aucun avant d'enregistrer, comme dans miah de réponse:
blog = Blog(name='My blog', tagline='Blogging is easy')
blog.save() # blog.pk == 1
blog.pk = None
blog.save() # blog.pk == 2
(La première save() crée un objet original, et le deuxième save() crée une copie.)
Si vous continuez à lire, il y a aussi des exemples sur la façon de gérer les deux cas plus complexes: (1) la copie d'un objet qui est une instance d'un modèle de sous-classe, et (2) la copie d'objets connexes, y compris les objets de type plusieurs-à-plusieurs relations.
Note historique: Ce n'était pas expliqué dans le Django docs jusqu'à la version 1.4. Il a été possible depuis avant la 1.4.
Possible des fonctionnalités à venir: celui-ci docs changement a été fait dans ce billet. Sur le billet du fil de commentaires, il y a aussi une discussion sur l'ajout d'un haut- copy
fonction pour les classes du modèle, mais autant que je sache, ils ont décidé de ne pas s'attaquer à ce problème. Donc, ce "manuel" mode de copie aurez probablement à faire pour l'instant.
Soyez prudent ici. Cela peut être extrêmement coûteux si vous êtes dans une boucle de quelque sorte et vous êtes récupérer les objets un par un. Si vous ne voulez pas l’appel à la base de données, juste faire :
Il fait la même chose que certains de ces autres réponses, mais il n’a pas la base de données appelle pour récupérer un objet. C’est également utile si vous voulez faire une copie d’un objet qui n’existe pas encore dans la base de données.
Il y a un extrait de clone ici, que vous pourrez ajouter à votre modèle qui fait ceci :
Comment faire cela a été ajouté aux docs officiels de Django dans Django1.4
https://docs.djangoproject.com/en/1.4/topics/DB/Queries/#Copying-Model-instances
La réponse officielle est similaire à la réponse de miah, mais les docs soulignent quelques difficultés avec l’héritage et les objets liés, donc vous devriez probablement Assurez-vous de que lire les docs.