2016-06-28 5 views
0

упрощено, у меня есть 2 объекта документа: Resource и CableСохранить ссылку на поле 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

 Смежные вопросы

  • Нет связанных вопросов^_^