Saving changes to objects
To save changes to an object that's already in the database, use save()
.
Given a Blog
instance b5
that has already been saved to the database, this example changes its name and updates its record in the database:
>>> b5.name = 'New name' >>> b5.save()
This performs an UPDATE
SQL statement behind the scenes. Django doesn't hit the database until you explicitly call save()
.
Saving ForeignKey and ManyToManyField fields
Updating a ForeignKey
field works exactly the same way as saving a normal field-simply assign an object of the right type to the field in question. This example updates the blog
attribute of an Entry
instance entry
, assuming appropriate instances of Entry
, and Blog
are already saved to the database (so we can retrieve them below):
>>> from blog.models import Entry >>> entry = Entry.objects.get(pk=1) >>> cheese_blog = Blog.objects.get(name="Cheddar Talk") >>> entry.blog = cheese_blog >>> entry.save()
Updating a ManyToManyField
works a little differently-use the add()
method on the field to add a record to the relation. This example adds the Author
instance joe
to the entry
object:
>>> from blog.models import Author >>> joe = Author.objects.create(name="Joe") >>> entry.authors.add(joe)
To add multiple records to a ManyToManyField
in one go, include multiple arguments in the call to add()
, like this:
>>> john = Author.objects.create(name="John") >>> paul = Author.objects.create(name="Paul") >>> george = Author.objects.create(name="George") >>> ringo = Author.objects.create(name="Ringo") >>> entry.authors.add(john, paul, george, ringo)
Django will complain if you try to assign or add an object of the wrong type.