保存引用字段 mongoengine

Save reference field mongoengine

简化后,我有 2 个文档对象:ResourceCable

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