From 083f00be8465c1d7a1d56f19fa84fac73e506e00 Mon Sep 17 00:00:00 2001 From: Ross Lawley Date: Mon, 28 Nov 2011 08:09:17 -0800 Subject: [PATCH] Fixes passed in Constructor data for complexfields Fixes #355 --- mongoengine/base.py | 3 ++- tests/fields.py | 15 +++++++++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/mongoengine/base.py b/mongoengine/base.py index 625d1a1d..b06cacb4 100644 --- a/mongoengine/base.py +++ b/mongoengine/base.py @@ -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): diff --git a/tests/fields.py b/tests/fields.py index 56d216a6..3a2e7a32 100644 --- a/tests/fields.py +++ b/tests/fields.py @@ -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), '[]') + + def test_list_field_strict(self): """Ensure that list field handles validation if provided a strict field type."""