Назначение 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
объект.