From 5ebf03b7dd2d1c215f5c0b725083d36379a7ac5b Mon Sep 17 00:00:00 2001 From: Tim Graham Date: Wed, 9 Jul 2014 07:31:50 -0400 Subject: [PATCH] Fixed #22351 -- Removed usage of lambdas in model field options. Thanks claudep for review. --- docs/ref/models/fields.txt | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/docs/ref/models/fields.txt b/docs/ref/models/fields.txt index 21934cf13d..a99522c77c 100644 --- a/docs/ref/models/fields.txt +++ b/docs/ref/models/fields.txt @@ -209,9 +209,16 @@ The default cannot be a mutable object (model instance, list, set, etc.), as a reference to the same instance of that object would be used as the default value in all new model instances. Instead, wrap the desired default in a callable. For example, if you had a custom ``JSONField`` and wanted to specify -a dictionary as the default, use a ``lambda`` as follows:: +a dictionary as the default, use a function as follows:: - contact_info = JSONField("ContactInfo", default=lambda:{"email": "to1@example.com"}) + def contact_default(): + return {"email": "to1@example.com"} + + contact_info = JSONField("ContactInfo", default=contact_default) + +Note that ``lambda``\s cannot be used for field options like ``default`` +because they cannot be :ref:`serialized by migrations `. +See that documentation for other caveats. ``editable`` ------------ @@ -1101,7 +1108,10 @@ define the details of how the relation works. with the Python ``datetime`` module to limit selections by date range. For example:: - limit_choices_to = lambda: {'pub_date__lte': datetime.date.utcnow()} + def limit_pub_date_choices(): + return {'pub_date__lte': datetime.date.utcnow()} + + limit_choices_to = limit_pub_date_choices If ``limit_choices_to`` is or returns a :class:`Q object `, which is useful for :ref:`complex queries