diff --git a/mongoengine/fields.py b/mongoengine/fields.py index 90a3b3d2..308bb4d6 100644 --- a/mongoengine/fields.py +++ b/mongoengine/fields.py @@ -130,6 +130,7 @@ class EmbeddedDocumentField(BaseField): if not isinstance(value, self.document): raise ValidationError('Invalid embedded document instance ' 'provided to an EmbeddedDocumentField') + self.document.validate(value) def lookup_member(self, member_name): return self.document._fields.get(member_name) diff --git a/tests/fields.py b/tests/fields.py index 0ebb143d..599e3d75 100644 --- a/tests/fields.py +++ b/tests/fields.py @@ -184,7 +184,7 @@ class FieldTest(unittest.TestCase): content = StringField() class PersonPreferences(EmbeddedDocument): - food = StringField() + food = StringField(required=True) number = IntField() class Person(Document): @@ -195,9 +195,14 @@ class FieldTest(unittest.TestCase): person.preferences = 'My Preferences' self.assertRaises(ValidationError, person.validate) + # Check that only the right embedded doc works person.preferences = Comment(content='Nice blog post...') self.assertRaises(ValidationError, person.validate) + # Check that the embedded doc is valid + person.preferences = PersonPreferences() + self.assertRaises(ValidationError, person.validate) + person.preferences = PersonPreferences(food='Cheese', number=47) self.assertEqual(person.preferences.food, 'Cheese') person.validate()