保存参考字段mongoengine

时间:2016-06-28 18:53:32

标签: python mongodb flask 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')

这两个文档都已在数据库中,但资源中的电缆字段设置为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'])

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

1 个答案:

答案 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