简化,我有2个文档对象:Resource
和Cable
class Cable(db.Document):
_id = db.ObjectIdField()
socket = db.EmbeddedDocumentField(Socket)
class Resource(db.Document):
_id = db.StringField()
cable = db.ReferenceField('Cable')
这两个文档都已在数据库中,但资源中的电缆字段设置为null
。
@resources.route('/<r_id>/add_cabling', methods=['GET'])
def set_connector(r_id):
r = Resource.objects(id=r_id).get()
c = Cable.objects().first()
r.cable=c
r.save()
return jsonify(r)
所以我将文档Cable
的实例传递给Resource
的实例,然后传递给save()
。
我得到的错误如下:
ValidationError:ValidationError(Resource:res01)(ReferenceField只接受DBRef或文档:['cable'])
我不明白,因为实际上我正在传递文件
答案 0 :(得分:1)
尝试通过此解决方法传递文档的DBRef
并且它可以正常工作。
@resources.route('/<r_id>/add_cabling', methods=['GET'])
def set_connector(r_id):
r = Resource.objects(id=r_id).get()
c = Cable.objects().first()
c.save() #revalidate here
r.cable=c.to_dbref()
r.save()
return jsonify(r)
有必要在查询的对象上再次执行save()
操作以获取DBRef
,否则会抛出此错误:
OperationError:只有保存的文档可以有一个有效的dbref