From 7c1671b4803a4ca78540a288a14eb2ec8ba74d80 Mon Sep 17 00:00:00 2001 From: Russell Keith-Magee Date: Tue, 23 Feb 2010 13:29:52 +0000 Subject: [PATCH] [1.1.X] Fixed #12859 -- Clarified the documentation on using multiple tables with .update() calls. Thanks to dwillis for the report. Backport of r12515 from trunk. git-svn-id: http://code.djangoproject.com/svn/django/branches/releases/1.1.X@12520 bcc190cf-cafb-0310-a4f2-bffc1f526a37 --- docs/topics/db/queries.txt | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/docs/topics/db/queries.txt b/docs/topics/db/queries.txt index 5e3669bdbb..2d97e2c188 100644 --- a/docs/topics/db/queries.txt +++ b/docs/topics/db/queries.txt @@ -778,7 +778,7 @@ a ``QuerySet``. You can do this with the ``update()`` method. For example:: You can only set non-relation fields and ``ForeignKey`` fields using this method. To update a non-relation field, provide the new value as a constant. To update ``ForeignKey`` fields, set the new value to be the new model -instance you want to point to. Example:: +instance you want to point to. For example:: >>> b = Blog.objects.get(pk=1) @@ -788,8 +788,13 @@ instance you want to point to. Example:: The ``update()`` method is applied instantly and doesn't return anything (similar to ``delete()``). The only restriction on the ``QuerySet`` that is updated is that it can only access one database table, the model's main -table. So don't try to filter based on related fields or anything like that; -it won't work. +table. You can filter based on related fields, but you can only update columns +in the model's main table. Example:: + + >>> b = Blog.objects.get(pk=1) + + # Update all the headlines belonging to this Blog. + >>> Entry.objects.select_related().filter(blog=b).update(headline='Everything is the same') Be aware that the ``update()`` method is converted directly to an SQL statement. It is a bulk operation for direct updates. It doesn't run any