4

需要你的帮助。我尝试使用 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)

我得到当前用户(烧瓶登录):

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

谢谢,人们。

4

1 回答 1

10

发生这些错误是因为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()
于 2014-01-20T21:36:39.193 回答