Merge branch 'pr/562'

This commit is contained in:
Ross Lawley 2014-06-26 16:42:23 +01:00
commit 1d189f239b
2 changed files with 39 additions and 1 deletions

View File

@ -181,7 +181,7 @@ class BaseDocument(object):
"""Dictionary-style field access, set a field's value. """Dictionary-style field access, set a field's value.
""" """
# Ensure that the field exists before settings its value # Ensure that the field exists before settings its value
if name not in self._fields: if not self._dynamic and name not in self._fields:
raise KeyError(name) raise KeyError(name)
return setattr(self, name, value) return setattr(self, name, value)

View File

@ -292,6 +292,44 @@ class DynamicTest(unittest.TestCase):
person.save() person.save()
self.assertEqual(Person.objects.first().age, 35) self.assertEqual(Person.objects.first().age, 35)
def test_dynamic_and_embedded_dict_access(self):
"""Ensure embedded dynamic documents work with dict[] style access"""
class Address(EmbeddedDocument):
city = StringField()
class Person(DynamicDocument):
name = StringField()
Person.drop_collection()
Person(name="Ross", address=Address(city="London")).save()
person = Person.objects.first()
person.attrval = "This works"
person["phone"] = "555-1212" # but this should too
# Same thing two levels deep
person["address"]["city"] = "Lundenne"
person.save()
self.assertEqual(Person.objects.first().address.city, "Lundenne")
self.assertEqual(Person.objects.first().phone, "555-1212")
person = Person.objects.first()
person.address = Address(city="Londinium")
person.save()
self.assertEqual(Person.objects.first().address.city, "Londinium")
person = Person.objects.first()
person["age"] = 35
person.save()
self.assertEqual(Person.objects.first().age, 35)
if __name__ == '__main__': if __name__ == '__main__':
unittest.main() unittest.main()