gpt4 book ai didi

python - MongoEngine 的嵌入式文档问题

转载 作者:IT老高 更新时间:2023-10-28 13:26:40 29 4
gpt4 key购买 nike

我使用 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 Embedded 文档,但我不知道哪里出错了。

任何帮助将不胜感激!

最佳答案

你只需要创建一个特定类的嵌入文档对象,然后将它与主文档类一起使用,如下所示:

new_user = User()
user_settings = UserSettings()
user_settings.default_cal = resp['calendar']
new_user.settings = user_settings
# more stuff
new_user.save()

注意:只为主文档创建新对象,不会自动创建相应的嵌入文档对象,但在读取数据时情况当然不同。

编辑:

正如 tbicr 在下面提到的,我们也可以这样做:

settings = db.EmbeddedDocumentField(UserSettings, default=UserSettings)

在声明字段时,这样我们就不需要像第一个示例中那样创建对象。

关于python - MongoEngine 的嵌入式文档问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17872836/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com