保存参考字段 mongoengine

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'])

我不明白,因为实际上我正在传递文件本身

ade*_*iis 5

尝试使用此解决方法传递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否则会抛出这个错误:

操作错误:只有保存的文档才能有有效的数据库引用