【问题标题】:mongoengine ReferenceField mongoengine.errors.ValidationErrormongoengine ReferenceField mongoengine.errors.ValidationError
【发布时间】:2014-01-20 21:22:29
【问题描述】:

需要你的帮助。我尝试使用 mongoengine、flask、flask-login。

我的模特:

class Post(db.Document):
   text = db.StringField(max_length=240)
   pub_date = db.DateTimeField(default=datetime.datetime.now)
   author = db.ReferenceField(Member)

我得到了当前用户(flask-login):

from flask.ext.login import current_user

比views.py中的:

new_post = Post()
    new_post.text = 'bla-bla'
    #new_post.author = current_user                                 #- DON`T WORK
    new_post.author = Member.objects.get(id=current_user.id)        #-WORK (WHY?)
    new_post.save()

new_post.author = current_user 有什么问题new_post.author = Member.objects.get(id=current_user.id) - 工作正常。

如果尝试使用new_post.author = current_user - 得到错误:

mongoengine.errors.ValidationError
ValidationError: ValidationError (Post:None) (A ReferenceField only accepts DBRef or documents: ['author'])

谢谢,各位。

【问题讨论】:

    标签: python flask mongoengine flask-login


    【解决方案1】:

    出现这些错误是因为 current_user 具有 LocalProxy 类型,而 mongo 正在寻找参考。虽然 current_user 在很多方面与它所代理的实际 Member 对象的工作方式相同,但它不能用作参考,因为没有关于 mongo 用作 DBRef 的参考集合的信息。

    如果您想避免 Member.objects.get(id=current_user.id) 获取实际对象,您可以从current_user 获取实际的Member 对象:

    new_post.author = current_user._get_current_object()
    

    或者只是DBRef:

    new_post.author = current_user.to_dbref()
    

    【讨论】:

    • 嗨!很抱歉在这里问这个..但我正在使用这种方法并不断收到 InvalidDocument:无法编码对象:。你知道是什么原因造成的吗?
    • @LarissaLeite 很多东西。我建议使用您的代码示例创建一个新问题,以便我们提供更好的帮助:-)
    • 其实我做过,如果可以请看一下stackoverflow.com/questions/32746284/…
    猜你喜欢
    • 2012-02-29
    • 1970-01-01
    • 2014-02-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多