2

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

关于发生了什么的任何想法?

谢谢!

4

2 回答 2

0

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

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

post = Post(
        description = request.json["description"],
        user = user.id
    )
于 2018-12-03T16:31:15.737 回答
0

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

import mongoengine as db
于 2015-09-23T18:22:01.257 回答