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 2

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()