Closes #46 by instantiating a new default instance for every field by request.

This commit is contained in:
flosch 2010-07-25 18:33:33 +02:00
parent 327452622e
commit 51065e7a4d
2 changed files with 6 additions and 3 deletions

View File

@ -52,7 +52,10 @@ class BaseField(object):
# Get value from document instance if available, if not use default
value = instance._data.get(self.name)
if value is None:
value = self.default
if callable(self.default): # fixes #46
value = self.default()
else:
value = self.default
# Allow callable default values
if callable(value):
value = value()

View File

@ -263,7 +263,7 @@ class ListField(BaseField):
raise ValidationError('Argument to ListField constructor must be '
'a valid field')
self.field = field
kwargs.setdefault('default', [])
kwargs.setdefault('default', lambda: [])
super(ListField, self).__init__(**kwargs)
def __get__(self, instance, owner):
@ -356,7 +356,7 @@ class DictField(BaseField):
def __init__(self, basecls=None, *args, **kwargs):
self.basecls = basecls or BaseField
assert issubclass(self.basecls, BaseField)
kwargs.setdefault('default', {})
kwargs.setdefault('default', lambda: {})
super(DictField, self).__init__(*args, **kwargs)
def validate(self, value):