【问题标题】:InvalidDocument: Cannot encode object: <User: User object> ReferenceField with MongoEngine无效文档:无法编码对象:<用户:用户对象> 使用 MongoEngine 的 ReferenceField
【发布时间】:2015-12-21 04:00:56
【问题描述】:

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

有什么想法吗?

谢谢!

【问题讨论】:

    标签: python mongodb flask mongoengine flask-mongoengine


    【解决方案1】:

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

    import mongoengine as db
    

    【讨论】:

    • db 是这样创建的:app.config.from_object('config') db = MongoEngine(app).. 不知道这个模块有什么问题:(
    • 我还没有在烧瓶中实际测试过它,但它在带有 mongoengine 的 django 应用程序中完美运行
    • 我已删除所有数据库。在我的模型中(我从 mongoenine import * 添加),但我仍然得到同样的东西..
    【解决方案2】:

    嗯,这是很久以前的事了,但我遇到了同样的问题。我不知道是不是因为不同的原因,但上下文看起来确实很相似。

    无论如何,看起来current_user 对象是一个LocalProxy 实例,它不能很好地与mongoengine 配合使用。诀窍是“强制”取消引用实例的 ObjectID,如下所示:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-05
      • 1970-01-01
      • 2020-02-13
      • 2021-12-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多