保存引用字段 mongoengine
Save reference field mongoengine
简化后,我有 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')
两个文档都已经在数据库中,但资源中的 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) (A ReferenceField only accepts DBRef or documents: ['cable'])
我不明白,因为实际上我正在传递文件本身
尝试使用此变通方法传递文档的 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: Only saved documents can have a valid dbref
简化后,我有 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')
两个文档都已经在数据库中,但资源中的 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) (A ReferenceField only accepts DBRef or documents: ['cable'])
我不明白,因为实际上我正在传递文件本身
尝试使用此变通方法传递文档的 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: Only saved documents can have a valid dbref