取消引用 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。
我正在尝试取消引用我的 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。