Fixes passed in Constructor data for complexfields

Fixes #355
This commit is contained in:
Ross Lawley 2011-11-28 08:09:17 -08:00
parent d00859ecfd
commit 083f00be84
2 changed files with 17 additions and 1 deletions

View File

@ -157,9 +157,11 @@ class BaseField(object):
if isinstance(value, (list, tuple)) and not isinstance(value, BaseList):
observer = DataObserver(instance, self.name)
value = BaseList(value, observer)
instance._data[self.name] = value
elif isinstance(value, dict) and not isinstance(value, BaseDict):
observer = DataObserver(instance, self.name)
value = BaseDict(value, observer)
instance._data[self.name] = value
return value
def __set__(self, instance, value):
@ -749,7 +751,6 @@ class BaseDocument(object):
self._data[name] = value
if hasattr(self, '_changed_fields'):
self._mark_as_changed(name)
super(BaseDocument, self).__setattr__(name, value)
def __expand_dynamic_values(self, name, value):

View File

@ -516,6 +516,21 @@ class FieldTest(unittest.TestCase):
self.assertEquals(BlogPost.objects.filter(info__100__test__exact='test').count(), 0)
BlogPost.drop_collection()
def test_list_field_passed_in_value(self):
class Foo(Document):
bars = ListField(ReferenceField("Bar"))
class Bar(Document):
text = StringField()
bar = Bar(text="hi")
bar.save()
foo = Foo(bars=[])
foo.bars.append(bar)
self.assertEquals(repr(foo.bars), '[<Bar: Bar object>]')
def test_list_field_strict(self):
"""Ensure that list field handles validation if provided a strict field type."""