Ensure meta.strict does not bypass constructor check
This commit is contained in:
		| @@ -70,9 +70,9 @@ class BaseDocument(object): | ||||
|  | ||||
|         signals.pre_init.send(self.__class__, document=self, values=values) | ||||
|  | ||||
|         # Check if there are undefined fields supplied, if so raise an | ||||
|         # Exception. | ||||
|         if not self._dynamic and self._meta.get('strict', True): | ||||
|         # Check if there are undefined fields supplied to the constructor, | ||||
|         # if so raise an Exception. | ||||
|         if not self._dynamic and (self._meta.get('strict', True) or _created): | ||||
|             for var in values.keys(): | ||||
|                 if var not in self._fields.keys() + ['id', 'pk', '_cls', '_text_score']: | ||||
|                     msg = ( | ||||
|   | ||||
| @@ -3171,6 +3171,21 @@ class FieldTest(unittest.TestCase): | ||||
|  | ||||
|         self.assertRaises(FieldDoesNotExist, test) | ||||
|  | ||||
|     def test_undefined_field_exception_with_strict(self): | ||||
|         """Tests if a `FieldDoesNotExist` exception is raised when trying to | ||||
|         instanciate a document with a field that's not defined, | ||||
|         even when strict is set to False. | ||||
|         """ | ||||
|  | ||||
|         class Doc(Document): | ||||
|             foo = StringField(db_field='f') | ||||
|             meta = {'strict': False} | ||||
|  | ||||
|         def test(): | ||||
|             Doc(bar='test') | ||||
|  | ||||
|         self.assertRaises(FieldDoesNotExist, test) | ||||
|  | ||||
|  | ||||
| class EmbeddedDocumentListFieldTestCase(unittest.TestCase): | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user