Browse Source

Refs #34099 -- Doc'd that custom Model.save() should update update_fields kwarg.

sarahboyce 2 years ago
parent
commit
0678d65722
1 changed files with 27 additions and 0 deletions
  1. 27 0
      docs/topics/db/models.txt

+ 27 - 0
docs/topics/db/models.txt

@@ -844,6 +844,33 @@ built-in model methods, adding new arguments. If you use ``*args,
 **kwargs`` in your method definitions, you are guaranteed that your
 code will automatically support those arguments when they are added.
 
+If you wish to update a field value in the :meth:`~Model.save` method, you may
+also want to have this field added to the ``update_fields`` keyword argument.
+This will ensure the field is saved when ``update_fields`` is specified. For
+example::
+
+    from django.db import models
+    from django.utils.text import slugify
+
+    class Blog(models.Model):
+        name = models.CharField(max_length=100)
+        slug = models.TextField()
+
+        def save(
+            self, force_insert=False, force_update=False, using=None, update_fields=None
+        ):
+            self.slug = slugify(self.name)
+            if update_fields is not None and "name" in update_fields:
+                update_fields = {"slug"}.union(update_fields)
+            super().save(
+                force_insert=force_insert,
+                force_update=force_update,
+                using=using,
+                update_fields=update_fields,
+            )
+
+See :ref:`ref-models-update-fields` for more details.
+
 .. admonition:: Overridden model methods are not called on bulk operations
 
     Note that the :meth:`~Model.delete()` method for an object is not