summaryrefslogtreecommitdiff
path: root/docs/ref/models
diff options
context:
space:
mode:
authorTim Graham <timograham@gmail.com>2013-07-12 06:19:16 -0400
committerTim Graham <timograham@gmail.com>2013-07-12 06:19:16 -0400
commit3cdeb572d73fca3d7966318c760f61ba73e5ad5f (patch)
tree1b001344c273d100b79d2edde5a21941c52948f4 /docs/ref/models
parentd1d09fecf87e9139c9493218c9211e6c91f791a3 (diff)
Fixed #17528 -- Documented that add() and remove() with a many-to-many relationship do not call Model.save()
Diffstat (limited to 'docs/ref/models')
-rw-r--r--docs/ref/models/relations.txt16
1 files changed, 16 insertions, 0 deletions
diff --git a/docs/ref/models/relations.txt b/docs/ref/models/relations.txt
index ffebe37193..5a7d68417c 100644
--- a/docs/ref/models/relations.txt
+++ b/docs/ref/models/relations.txt
@@ -48,6 +48,14 @@ Related objects reference
>>> e = Entry.objects.get(id=234)
>>> b.entry_set.add(e) # Associates Entry e with Blog b.
+ In the example above, ``e.save()`` is called to perform the update.
+ Using ``add()`` with a many-to-many relationship, however, will not
+ call any ``save()`` methods, but rather create the relationships
+ using :meth:`QuerySet.bulk_create()
+ <django.db.models.query.QuerySet.bulk_create>`. If you need to execute
+ some custom logic when a relationship is created, listen to the
+ :data:`~django.db.models.signals.m2m_changed` signal.
+
.. method:: create(**kwargs)
Creates a new object, saves it and puts it in the related object set.
@@ -86,6 +94,14 @@ Related objects reference
>>> e = Entry.objects.get(id=234)
>>> b.entry_set.remove(e) # Disassociates Entry e from Blog b.
+ Similar to :meth:`add()`, ``e.save()`` is called in the example above
+ to perform the update. Using ``remove()`` with a many-to-many
+ relationship, however, will delete the relationships using
+ :meth:`QuerySet.delete()<django.db.models.query.QuerySet.delete>` which
+ means no model ``save()`` methods are called; listen to the
+ :data:`~django.db.models.signals.m2m_changed` signal if you wish to
+ execute custom code when a relationship is deleted.
+
For :class:`~django.db.models.ForeignKey` objects, this method only
exists if ``null=True``. If the related field can't be set to ``None``
(``NULL``), then an object can't be removed from a relation without