0

我正在尝试取消引用我的 Flask 后端上的引用字段并返回取消引用该特定字段的完整对象。

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

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,但随之而来的问题是,我如何成功取消引用该字段并返回文档。

谢谢

4

1 回答 1

1

是期望的ListField元素,ObjectId并且因为您已取消引用它们,所以会引发该错误。我不确定这是最优雅的方式,但您能否将其转换usr.to_json()为 a 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。

于 2015-06-10T15:09:46.647 回答