2015-01-08 3 views
1

У меня есть эти модели mongoengine заявили:Invalid экземпляра вкладывается документ, представленный на EmbeddedDocumentField по экономии

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'] 
    } 

И я стараюсь основного

>>> sy = SyncDiscrepancy(upi='axzdsa', error_code=2) 
>>> fl = Flight() 
>>> fl.sync_discrepancies.append(sy) 
>>> fl.save() 
Traceback (most recent call last): 

File "<debugger>", line 1, in <module> 

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']) 

Теперь я знаю, что я не заполнил требуемый поля для flight, но даже если я это сделаю, я до сих пор получаю эту ошибку Invalid embedded document instance provided to an EmbeddedDocumentField: ['sync_discrepancies']. Что именно представляет собой проблема с тем, как я объявляю SyncDiscrepancy и сохраняю рейс?

Использование mongoengine==0.8.7

EDIT Укороченный его

class SyncDiscrepancy(EmbeddedDocument): 
    error_code = IntField() 

class Flight(Document): 
    sync_discrepancies = ListField(EmbeddedDocumentField(SyncDiscrepancy)) 

и:

>>> sy = SyncDiscrepancy(error_code=2) 
>>> fl = Flight() 
>>> fl.sync_discrepancies.append(fl) 
>>> fl.save() 
Traceback (most recent call last): 

File "<debugger>", line 1, in <module> 

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']) 

>>> 

Я не понимаю, почему я получаю эту ошибку.

ответ

2

Я кончался переключение порядок деклараций модели, и он просто работал (то есть объявить модель после на которую ссылается (???))

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

class SyncDiscrepancy(EmbeddedDocument): 
    error_code = IntField() 
+0

Не понимаю, почему, но это решается моя проблема тоже! – vanguard69

+1

Я думаю, что решение вашей проблемы состояло в том, что вы использовали '' 'цитаты. И не изменение в порядке. :) –

+0

Согласиться на это решение для заказа. Я решил проблему, перенаправив мой импорт. – SolessChong

Смежные вопросы