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 # Get value from document instance if available, if not use default
value = instance._data.get(self.name) value = instance._data.get(self.name)
if value is None: if value is None:
value = self.default if callable(self.default): # fixes #46
value = self.default()
else:
value = self.default
# Allow callable default values # Allow callable default values
if callable(value): if callable(value):
value = value() value = value()

View File

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