0

我有模型:

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'])

4

1 回答 1

3

current_user.pkObjectId类型(只有 id,没有关于收藏的信息)。

current_userLocalProxy类型。

您无法保存参考,ObjectId因为没有关于参考集合和 mongo 用于 this 的信息BDRef

您可以DBRef使用方法从 mongoengine 文档中获取对象Document.to_dbref

所以 mognoenginge 检查类型以DBRef明确获取或从带有to_dbref.

因为current_user您可以调用to_dbref获取DBRef对象或_get_current_object()获取真实User对象。

于 2013-09-15T06:58:32.987 回答