diff --git a/AUTHORS b/AUTHORS index 758554c0..59660cbb 100644 --- a/AUTHORS +++ b/AUTHORS @@ -237,3 +237,4 @@ that much better: * Bryan Bennett (https://github.com/bbenne10) * Gilb's Gilb's (https://github.com/gilbsgilbs) * Joshua Nedrud (https://github.com/Neurostack) + * Shu Shen (https://github.com/shushen) diff --git a/docs/changelog.rst b/docs/changelog.rst index 3fa9eb74..c2a0a527 100644 --- a/docs/changelog.rst +++ b/docs/changelog.rst @@ -12,6 +12,7 @@ Changes in 0.10.7 - DEV - Fixed long fields stored as int32 in Python 3. #1253 - MapField now handles unicodes keys correctly. #1267 - ListField now handles negative indicies correctly. #1270 +- Fixed AttributeError when initializing EmbeddedDocument with positional args. #681 Changes in 0.10.6 ================= diff --git a/mongoengine/base/document.py b/mongoengine/base/document.py index a890081a..5641426d 100644 --- a/mongoengine/base/document.py +++ b/mongoengine/base/document.py @@ -51,7 +51,7 @@ class BaseDocument(object): # We only want named arguments. field = iter(self._fields_ordered) # If its an automatic id field then skip to the first defined field - if self._auto_id_field: + if getattr(self, '_auto_id_field', False): next(field) for value in args: name = next(field) diff --git a/tests/document/instance.py b/tests/document/instance.py index 4cfe8b8e..978488f1 100644 --- a/tests/document/instance.py +++ b/tests/document/instance.py @@ -2928,6 +2928,20 @@ class InstanceTest(unittest.TestCase): self.assertEqual(person.name, "Test User") self.assertEqual(person.age, 42) + def test_positional_creation_embedded(self): + """Ensure that embedded document may be created using positional arguments. + """ + job = self.Job("Test Job", 4) + self.assertEqual(job.name, "Test Job") + self.assertEqual(job.years, 4) + + def test_mixed_creation_embedded(self): + """Ensure that embedded document may be created using mixed arguments. + """ + job = self.Job("Test Job", years=4) + self.assertEqual(job.name, "Test Job") + self.assertEqual(job.years, 4) + def test_mixed_creation_dynamic(self): """Ensure that document may be created using mixed arguments. """