Author: lukeplant
Date: 2011-11-01 14:44:18 -0700 (Tue, 01 Nov 2011)
New Revision: 17064

Modified:
   django/trunk/docs/topics/db/queries.txt
Log:
Fixed #4027 - Document how to make copies of model instances

Thanks to Marek Kubica for the report and initial patch, and to oinopion and
erikr for work on the patch.

Modified: django/trunk/docs/topics/db/queries.txt
===================================================================
--- django/trunk/docs/topics/db/queries.txt     2011-11-01 21:37:12 UTC (rev 
17063)
+++ django/trunk/docs/topics/db/queries.txt     2011-11-01 21:44:18 UTC (rev 
17064)
@@ -828,6 +828,46 @@
 
     Entry.objects.all().delete()
 
+.. _topics-db-queries-copy:
+
+Copying model instances
+=======================
+
+Although there is no built-in method for copying model instances, it is
+possible to easily create new instance with all fields' values copied. In the
+simplest case, you can just set ``pk`` to ``None``. Using our blog example::
+
+    blog = Blog(name='My blog', tagline='Blogging is easy')
+    blog.save() # post.pk == 1
+
+    blog.pk = None
+    blog.save() # post.pk == 2
+
+Things get more complicated if you use inheritance. Consider a subclass of
+``Blog``::
+
+    class ThemeBlog(Blog):
+        theme = models.CharField(max_length=200)
+
+    django_blog = ThemeBlog(name='Django', tagline='Django is easy', theme = 
'python')
+    django_blog.save() # django_blog.pk == 3
+
+Due to how inheritance works, you have to set both ``pk`` and ``id`` to None::
+
+    django_blog.pk = None
+    django_blog.id = None
+    django_blog.save() # django_blog.pk == 4
+
+This process does not copy related objects. If you want to copy relations,
+you have to write a little bit more code. In our example, ``Entry`` has a many 
to many
+field to ``Author``::
+
+    entry = Entry.objects.all()[0] # some previous entry
+    old_authors = entry.authors.all()
+    entry.pk = None
+    entry.save()
+    entry.authors = old_authors # saves new many2many relations
+
 .. _topics-db-queries-update:
 
 Updating multiple objects at once

-- 
You received this message because you are subscribed to the Google Groups 
"Django updates" group.
To post to this group, send email to django-updates@googlegroups.com.
To unsubscribe from this group, send email to 
django-updates+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/django-updates?hl=en.

Reply via email to