2016-06-28 55 views
0

简化,我有2个文件对象:ResourceCable保存的参考场mongoengine

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) (A ReferenceField only accepts DBRef or documents: ['cable'])

我不明白,因为其实我传递文档本身

回答

0

与此变通办法通过原稿的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