La documentación de Django para las consultas de la base de datos incluye a section on copying model instances. Suponiendo sus claves primarias son generados automáticamente, se obtiene el objeto que desea copiar, establece la clave principal para None
, y guardar el objeto de nuevo:
blog = Blog(name='My blog', tagline='Blogging is easy')
blog.save() # blog.pk == 1
blog.pk = None
blog.save() # blog.pk == 2
En este fragmento, la primera save()
crea el objeto original, y el segundo save()
crea la copia.
Si sigue leyendo la documentación, también hay ejemplos sobre cómo manejar dos casos más complejos: (1) copiar un objeto que es una instancia de una subclase modelo y (2) copiar objetos relacionados, incluidos objetos en relaciones de muchos a muchos.
Nota sobre la respuesta de miah: Ajuste del pk a None
se menciona en la respuesta de Miah, aunque no se presentó frente y al centro. Entonces mi respuesta principalmente sirve para enfatizar ese método como la manera recomendada por Django para hacerlo.
Nota histórica: Esto no se explicó en los documentos de Django hasta la versión 1.4. Sin embargo, ha sido posible desde antes del 1.4.
Posible funcionalidad futura: el cambio de documentos mencionado anteriormente se realizó en this ticket. En el hilo de comentarios del ticket, también se discutió sobre cómo agregar una función integrada de copy
para las clases de modelo, pero hasta donde sé, decidieron no abordar ese problema todavía. Entonces, esta forma "manual" de copia probablemente tenga que ver por ahora.
Merece la pena señalar que esto cita a Django 1.2, ahora estamos a la altura de Django 1.4. No he probado si esto funciona o no, pero no use esta respuesta sin estar seguro de que funciona para usted. – Joe
Funciona bien en 1.4.1 Esta es probablemente una de esas cosas que continuarán funcionando durante mucho tiempo. – frnhr
esta no es una solución general para cuando tienes una base de datos con claves primarias automáticas ... adivinar una clave primaria no utilizada parece una mala idea. – FizxMike