需要你的帮助。我尝试使用 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'])
谢谢大家。
最佳答案
这些错误的发生是因为 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()
关于python - mongoengine 引用字段 mongoengine.errors.ValidationError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21244415/