取消引用 Mongoengine 中的 ReferenceField

Dereference a ReferenceField in Mongoengine

我正在尝试取消引用我的 Flask 后端上的一个引用字段,return 取消引用该特定字段的完整对象。

我试图取消引用的字段定义如下:

vouches_received = db.ListField(db.ReferenceField('Vouch'))

我尝试取消引用的方式是这样的:

unverified_vouches = []
for vouch in usr.vouches_received:
    unverified_vouches.append(vouch.to_mongo())

usr.vouches_received = unverified_vouches

然而,当我这样做时:

usr.to_json()

在对象上,然后我得到一个 ValidationError,如下所示:

ValidationError: u'{...}' is not a valid ObjectId, it must be a
12-byte input of type 'str' or a 24-character hex string

3 个点 (...) 基本上是取消引用的文档,它主要包含字符串、日期字段和一些我不想取消引用的其他引用字段。

我知道这是一个有效的错误,因为它期望引用字段有一个 ObjectID,但随之而来的问题是,我如何成功取消引用该字段和 return 文档。

谢谢

ListField 需要 ObjectId 的元素,因为您取消引用了它们,所以会抛出该错误。我不确定这是不是最优雅的方式,但您能否将 usr.to_json() 转换为 dict,然后将 vouches_received 列表替换为引用列表 - 我无法测试它但是像?

user_dict = json.loads(usr.to_json())

unverified_vouches = []
for vouch in usr.vouches_received:
    user_dict['vouches_received'].append(vouch.to_mongo())

usr_json = json.dumps(user_dict)

更好的解决方案可能是使用 EmbededDocument。