2016-06-28 6 views
0

나는이 문서 개체가, 간체 : 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) 

그래서 나는 다음 save() Resource의 인스턴스에 문서 Cable의 인스턴스를 전달하고 있어요. 다음은 오류가 내가 얻을 :

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

실제로 내가 문서 자체이 해결 방법이 문서의 DBRef을 통과하고 작동으로 시도

답변

0

를 통과하고 있기 때문에 이해가 안 돼요.

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() 작업을 수행 할 필요가있다