Instancia de documento incrustado no válida proporcionada a un EmbeddedDocumentField en guardar

Tengo estos modelos de mongoengine declarados:

class SyncDiscrepancy(EmbeddedDocument): upi = StringField(primary_key=True) error_code = IntField(required=True) meta = { 'indexes': ['upi', 'error_code'] } ########## END SYNC class Flight(Document): identifier = StringField(primary_key=True) env = StringField(required=True, max_length=3) peak = IntField(required=True) carrier = StringField(required=True, max_length=3) number = IntField(required=True) boardpoint = StringField(required=True) offpoint = StringField(required=True) date = DateTimeField(required=True) status = StringField(required=True) # store comments comments = StringField() last_modified = DateTimeField(required=True) local_discrepancies = ListField(EmbeddedDocumentField(LocalDiscrepancy)) sync_discrepancies = ListField(EmbeddedDocumentField(SyncDiscrepancy)) count_local = IntField(required=True) count_sync = IntField(required=True) meta = { 'indexes': ['_id', 'env','peak', 'date'], 'ordering': ['-date'] } 

Y pruebo un básico

 >>> sy = SyncDiscrepancy(upi='axzdsa', error_code=2) >>> fl = Flight() >>> fl.sync_discrepancies.append(sy) >>> fl.save() Traceback (most recent call last): File "", line 1, in  fl.save() File "/usr/lib/python2.7/site-packages/mongoengine/document.py", line 224, in save self.validate(clean=clean) File "/usr/lib/python2.7/site-packages/mongoengine/base/document.py", line 323, in validate raise ValidationError(message, errors=errors) ValidationError: ValidationError (Flight:None) (Invalid embedded document instance provided to an EmbeddedDocumentField: ['sync_discrepancies'] Field is required: ['status', 'count_local', 'offpoint', 'identifier', 'number', 'boardpoint', 'last_modified', 'peak', 'env', 'carrier', 'date', 'count_sync']) 

Ahora sé que no llené los campos requeridos para el flight , pero incluso si lo hago, todavía recibo este error. Invalid embedded document instance provided to an EmbeddedDocumentField: ['sync_discrepancies'] . ¿Cuál es exactamente el problema con cómo declaro el SyncDiscrepancy y SyncDiscrepancy el vuelo?

Utilizando mongoengine==0.8.7

EDITAR lo acortó a

 class SyncDiscrepancy(EmbeddedDocument): error_code = IntField() class Flight(Document): sync_discrepancies = ListField(EmbeddedDocumentField(SyncDiscrepancy)) 

y:

 >>> sy = SyncDiscrepancy(error_code=2) >>> fl = Flight() >>> fl.sync_discrepancies.append(fl) >>> fl.save() Traceback (most recent call last): File "", line 1, in  fl.save() File "/usr/lib/python2.7/site-packages/mongoengine/document.py", line 224, in save self.validate(clean=clean) File "/usr/lib/python2.7/site-packages/mongoengine/base/document.py", line 323, in validate raise ValidationError(message, errors=errors) ValidationError: ValidationError (Flight:None) (Invalid embedded document instance provided to an EmbeddedDocumentField: ['sync_discrepancies']) >>> 

No entiendo por qué me sale este error.

Terminé cambiando el orden de las declaraciones del modelo y simplemente funcionó (es decir, declarar el modelo después de ser referenciado (???))

 class Flight(Document): sync_discrepancies = ListField(EmbeddedDocumentField('SyncDiscrepancy')) class SyncDiscrepancy(EmbeddedDocument): error_code = IntField() 

Me estaba volviendo loco con este error y, en mi caso, las clases de documentos incrustados estaban referenciadas por su nombre (usando una notación de comillas) y eliminando las comillas que solucionaban el problema.

Tuve algo como esto:

 class SyncDiscrepancy(EmbeddedDocument): error_code = IntField() class Flight(Document): sync_discrepancies = ListField(EmbeddedDocumentField('SyncDiscrepancy')) 

Cambiándolo a esto

 class SyncDiscrepancy(EmbeddedDocument): error_code = IntField() class Flight(Document): sync_discrepancies = ListField(EmbeddedDocumentField(SyncDiscrepancy)) 

arreglado el problema