ade*_*iis 2 python mongodb mongoengine flask
简单地说,我有 2 个 Document 对象:Resource和Cable
class Cable(db.Document):
_id = db.ObjectIdField()
socket = db.EmbeddedDocumentField(Socket)
class Resource(db.Document):
_id = db.StringField()
cable = db.ReferenceField('Cable')
Run Code Online (Sandbox Code Playgroud)
这两个文档都已在数据库中,但资源中的电缆字段设置为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)
Run Code Online (Sandbox Code Playgroud)
所以我将文档的实例传递给thenCable的实例。我得到的错误如下:Resourcesave()
ValidationError: ValidationError (Resource:res01)(ReferenceField 仅接受 DBRef 或文档:['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)
Run Code Online (Sandbox Code Playgroud)
需要对save()查询的对象再次进行操作才能得到,DBRef否则会抛出这个错误:
操作错误:只有保存的文档才能有有效的数据库引用