From f93e7f5674436b230e6b4023570939a20c0c6055 Mon Sep 17 00:00:00 2001 From: Tim Graham Date: Fri, 31 Jul 2015 12:16:45 -0400 Subject: [PATCH] Fixed #24690 -- Added a warning about mutable defaults for ArrayField/JSONField. --- docs/ref/contrib/postgres/fields.txt | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/docs/ref/contrib/postgres/fields.txt b/docs/ref/contrib/postgres/fields.txt index 5ca8177eb5..587c44a435 100644 --- a/docs/ref/contrib/postgres/fields.txt +++ b/docs/ref/contrib/postgres/fields.txt @@ -17,6 +17,12 @@ ArrayField `. ``ArrayField`` can be nested to store multi-dimensional arrays. + If you give the field a :attr:`~django.db.models.Field.default`, ensure + it's a callable such as ``list`` (for an empty default) or a callable that + returns a list (such as a function). Incorrectly using ``default=[]`` + creates a mutable default that is shared between all instances of + ``ArrayField``. + .. attribute:: base_field This is a required argument. @@ -461,6 +467,12 @@ JSONField its Python native format: dictionaries, lists, strings, numbers, booleans and ``None``. + If you give the field a :attr:`~django.db.models.Field.default`, ensure + it's a callable such as ``dict`` (for an empty default) or a callable that + returns a dict (such as a function). Incorrectly using ``default={}`` + creates a mutable default that is shared between all instances of + ``JSONField``. + .. note:: PostgreSQL has two native JSON based data types: ``json`` and ``jsonb``.