Django MongoEngine嵌入式文档问题

时间:2016-01-28 16:59:09

标签: python django mongodb mongoengine

我在Django上使用MongoEngine。在我的Django应用程序中,我想创建以下嵌入式文档字段:

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 shell中测试我的代码,我收到了以下错误:

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

就MongoDB架构设计而言,这应该是一个完全有效的架构,但MongoEngine似乎并不喜欢它。有人可以解释这里的问题是什么以及如何以一种很好的方式避免它?

1 个答案:

答案 0 :(得分:2)

这与MongoEngine无关;这是一个简单的Python范围问题。在类的主体完成执行之前,不会定义Person,这意味着您不能在该类主体中使用该名称。

然而,正如documentation所解释的那样,MongoEngine确实有一个解决方法;改为使用字符串'self'