Mongoengine ReferenceField mongoengine.ошибки.ValidationError
Нужна ваша помощь. Я пытаюсь работать с mongoengine, flask, flask-логин.
Моя модель:
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'])
Thx, люди.
1 ответ:
Эти ошибки происходят потому, что
current_user
имеет тип LocalProxy, в то время как mongo ищет ссылку. Хотяcurrent_user
во многих отношениях работает так же, как и фактический объектMember
, он не может быть использован в качестве ссылки, потому что нет никакой информации о коллекции ссылок для использования mongo в качестве DBRef., Если вы хотите избежать членом.объекты.get(ИД=функция current_user.идентификатор), чтобы получить фактический объект, вы можете просто получить фактическое
Member
объекта отcurrent_user
:new_post.author = current_user._get_current_object()
Или Просто
DBRef
:new_post.author = current_user.to_dbref()