2016-06-28 12 views
0

は、私は2つのDocumentオブジェクトを持っている、簡素化:Resource保存参照フィールドmongoengine

class Cable(db.Document): 
    _id = db.ObjectIdField() 
    socket = db.EmbeddedDocumentField(Socket) 

class Resource(db.Document): 
    _id = db.StringField() 
    cable = db.ReferenceField('Cable') 

Cable両方の文書は、DBに既にあるが、リソース内のケーブルフィールドが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) 

だから私はResource、その後save()のインスタンスに文書Cableのインスタンスを渡しています。 は私が得るエラーは以下の通りです:実際に私は

答えて

0

この回避策は、文書のDBRefを渡してみましたし、それが動作文書自体を渡していますので、

ValidationError: ValidationError (Resource:res01) (A ReferenceField only accepts DBRef or documents: ['cable'])

私は理解していません。

OperationError: Only saved documents can have a valid 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) 

それ以外の場合は、このエラーがスローされますDBRefを取得するために照会オブジェクト上で再びsave()操作を行う必要があります

関連する問題