我一直在使用Flask和MongoEngine,而且由于ReferenceField而在尝试保存对象时遇到了麻烦。
这就是我的模型:
class User(UserMixin, db.Document):
first_name = db.StringField(max_length=255, required=True)
last_name = db.StringField(max_length=255, required=True)
email = db.StringField(max_length=255)
class Post(db.Document):
description = db.StringField(max_length=255, required=True)
inserted_at = db.DateTimeField(default=datetime.datetime.now, required=True)
tags = db.ListField(db.EmbeddedDocumentField('Tag'))
comments = db.ListField(db.EmbeddedDocumentField('Comment'))
user = db.ReferenceField('User')
这是我创建Post对象的方式:
user = User.objects.filter(id=current_user.id).first()
post = Post(
description = request.json["description"],
user = user
)
我也尝试过:
user = current_user._get_current_object()
但我一直在接受:
InvalidDocument: Cannot encode object: <User: User object>
有关正在发生的事情的任何想法?
谢谢!
答案 0 :(得分:0)
我认为您使用的数据库模块存在一些问题。它真的是mongoengine模块吗?因为你的代码工作正常,如果我使用
import mongoengine as db
答案 1 :(得分:0)
嗯,这是很长一段时间了,但是我遇到了同样的问题。我不知道是否是由于不同的原因,但是上下文确实看起来非常相似。
无论如何,看起来current_user
对象是一个LocalProxy
实例,在mongoengine上不能很好地发挥作用。技巧是“强制”取消引用实例的ObjectID,如下所示:
post = Post(
description = request.json["description"],
user = user.id
)