lov*_*tch 2 python mongoengine flask 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)
Run Code Online (Sandbox Code Playgroud)
我得到当前用户(flask-login):
from flask.ext.login import current_user
Run Code Online (Sandbox Code Playgroud)
比在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()
Run Code Online (Sandbox Code Playgroud)
有什么错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'])
Run Code Online (Sandbox Code Playgroud)
谢谢,人.
发生这些错误是因为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()
Run Code Online (Sandbox Code Playgroud)
或者只是DBRef
:
new_post.author = current_user.to_dbref()
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1679 次 |
最近记录: |