InvalidDocument:无法编码对象:<user:user =“”object =“”>带有MongoEngine

时间:2015-09-23 17:52:12

标签: python mongodb flask mongoengine flask-mongoengine

我一直在使用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>

有关正在发生的事情的任何想法?

谢谢!

2 个答案:

答案 0 :(得分:0)

我认为您使用的数据库模块存在一些问题。它真的是mongoengine模块吗?因为你的代码工作正常,如果我使用

import mongoengine as db

答案 1 :(得分:0)

嗯,这是很长一段时间了,但是我遇到了同样的问题。我不知道是否是由于不同的原因,但是上下文确实看起来非常相似。

无论如何,看起来current_user对象是一个LocalProxy实例,在mongoengine上不能很好地发挥作用。技巧是“强制”取消引用实例的ObjectID,如下所示:

post = Post(
        description = request.json["description"],
        user = user.id
    )