ReferenceField分配

时间:2013-09-13 16:42:50

标签: mongoengine flask-mongoengine

我有模特:

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

1 个答案:

答案 0 :(得分:3)

current_user.pkObjectId类型(只是id,没有关于集合的信息)。

current_userLocalProxy类型。

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

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

因此,mognoenginge检查类型以明确获取DBRef或使用to_dbref从文档中获取。{/ p>

对于current_user,您可以致电to_dbref以获取DBRef个对象或_get_current_object()来获取真实的User个对象。