我正在使用MongoDB和Flask MongoEngine作为我的web应用程序的ORM组件。
我对用户文档架构的结构如下:
from ..core import db
class UserComics(db.EmbeddedDocument):
favorites = db.SortedListField(db.StringField(), default=None)
class UserSettings(db.EmbeddedDocument):
display_favs = db.BooleanField(default=False)
default_cal = db.StringField(default=None)
show_publishers = db.ListField(db.StringField(), default=None)
class UserTokens(db.EmbeddedDocument):
refresh_token = db.StringField(default=None)
access_token = db.StringField(default=None)
expire_time = db.StringField(default=None)
class User(db.Document, UserMixin):
# Save User document to this collection
meta = {'collection': 'users_test'}
userid = db.StringField()
full_name = db.StringField()
first_name = db.StringField()
last_name = db.StringField()
gender = db.StringField()
birthday = db.StringField()
email = db.EmailField()
friends = db.ListField(db.StringField())
date_creation = db.DateTimeField()
last_login = db.DateTimeField()
favorites = db.EmbeddedDocumentField(UserComics)
settings = db.EmbeddedDocumentField(UserSettings)
tokens = db.EmbeddedDocumentField(UserTokens)
但是,当创建这样的新用户时(我省略了行…):
def create_new_user(resp):
newUser = User()
....
newUser.settings.default_cal = resp['calendar']
....
newUser.save()
return
我遇到这个错误:
AttributeError:“NoneType”对象没有“default-cal”属性
在我看来,我并没有正确地使用MongoEngines嵌入的文档,但我不知道哪里出错了。
任何帮助都将不胜感激!
您只需创建一个特定类的嵌入文档对象,然后将其与主文档类一起使用,如下所示:
注意:只为主文档创建一个新对象,不会自动创建相应的嵌入文档对象,但在读取数据时情况当然不同。
编辑:
正如tbicr在下面提到的,我们也可以这样做:
在声明字段时,这样我们就不需要创建第一个示例中给出的对象。
相关问题 更多 >
编程相关推荐