Назначение ReferenceField

У меня есть модель:

from flask.ext.security import currennt_user
#instance of LocalProxy wrapped model User(db.Document)

class ContactModel(db.Document, SomeMixin):
    user = db.ReferenceField(User, verbose_name='User', required=True)

И столкнулся со странным поведением ReferenceField. Почему работает следующий код:

model = ContactModel(user = current_user.pk, ....)

И не следует:

model = ContactModel()
model.user = current_user.pk

Та же проблема, когда я пытаюсь сделать: модель = ContactModel() model.user = current_user

Последние две части кода выдают ошибку: ValidationError: ValidationError (ContactModel:None) (A ReferenceField only accepts DBRef or documents: ['user'])

1 ответ

Решение

current_user.pk имеет ObjectId тип (просто идентификатор, нет информации о коллекции).

current_user имеет LocalProxy тип.

Вы не можете сохранить ссылку как ObjectId потому что нет никакой информации о сборе и использовании монго для этого BDRef,

Ты можешь получить DBRef объект из документа mongoengine с Document.to_dbref метод.

Так могненгинге проверять тип, чтобы получить DBRef явно или получить его из документа с to_dbref,

За current_user ты можешь позвонить to_dbref получить DBRef объект или _get_current_object() чтобы стать реальным User объект.

Другие вопросы по тегам