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