我有模特:
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
当我尝试做同样的问题时: model = ContactModel() model.user = current_user
最后两个代码片段引发错误:ValidationError: ValidationError (ContactModel:None) (A ReferenceField only accepts DBRef or documents: ['user'])
答案 0 :(得分:3)
current_user.pk
有ObjectId
类型(只是id,没有关于集合的信息)。
current_user
有LocalProxy
类型。
您无法将引用保存为ObjectId
,因为此BDRef
没有关于参考集合和mongo使用的信息。
您可以使用DBRef
方法从mongoengine文档中获取Document.to_dbref
个对象。
因此,mognoenginge检查类型以明确获取DBRef
或使用to_dbref
从文档中获取。{/ p>
对于current_user
,您可以致电to_dbref
以获取DBRef
个对象或_get_current_object()
来获取真实的User
个对象。