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. git-svn-id: http://code.djangoproject.com/svn/django/trunk@17064 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
parent
3b7a4c6adc
commit
a97ecfdea8
|
@ -828,6 +828,46 @@ complete query set::
|
||||||
|
|
||||||
Entry.objects.all().delete()
|
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:
|
.. _topics-db-queries-update:
|
||||||
|
|
||||||
Updating multiple objects at once
|
Updating multiple objects at once
|
||||||
|
|
Loading…
Reference in New Issue