2016-01-28 1 views
0

Я использую MongoEngine с Django. В моем приложении Django, я хочу создать следующий внедренный поле документа:Django MongoEngine встроенный документ выпуск

from mongoengine import Document, EmbeddedDocument, StringField, DateTimeField, \ 
    IntField, EmbeddedDocumentField, BooleanField, ListField 

class Person(EmbeddedDocument): 
    name = StringField(max_length=200, required=True) 
    gender = BooleanField() 
    birth_date = DateTimeField() 
    death_date = DateTimeField() 
    parents = ListField(EmbeddedDocumentField(Person)) 

я пошел, чтобы проверить мой код в оболочке Python, и я получил следующее сообщение об ошибке:

>>> from models import Person 
Traceback (most recent call last): 
...(cut for brevity)... 
parents = ListField(EmbeddedDocumentField(Person)) 
NameError: name 'Person' is not defined 

С точки зрения Конструкция схемы MongoDB, это должна быть абсолютно правильная схема, но MongoEngine, похоже, не нравится. Может ли кто-нибудь объяснить, в чем проблема, и как ее избежать?

ответ

2

Это не имеет никакого отношения к MongoEngine; это простая проблема Python. Person не определен до тех пор, пока тело класса не закончит выполнение, а это означает, что вы не можете использовать это имя в этом классе.

MongoEngine однако имеет обходное решение, как объясняет documentation; используйте вместо этого строку 'self'.