mongoengine ReferenceField mongoengine.errors.ValidationError

时间:2014-01-20 21:22:29

标签: python flask mongoengine flask-login

需要你的帮助。我尝试使用mongoengine,烧瓶,烧瓶登录。

我的模特:

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

我得到当前用户(名单登录):

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'])

Thx,人。

1 个答案:

答案 0 :(得分:7)

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

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

new_post.author = current_user._get_current_object()

或只是DBRef

new_post.author = current_user.to_dbref()