【发布时间】:2014-02-15 18:34:44
【问题描述】:
这是我在尝试使用主干模型进行简单保存时收到的错误:
{"error_message": "无法保存文档 (Mod on _id not allowed)", "traceback": "Traceback (最近一次调用最后一次):\n\n File \"/Users/mbp/Projects/env /employii/lib/python2.7/site-packages/tastypie/resources.py\",第 195 行,在包装器中\n response = callback(request, *args, **kwargs)\n\n File \"/Users /mbp/Projects/env/employii/lib/python2.7/site-packages/tastypie/resources.py\",第 435 行,在 dispatch_detail\n return self.dispatch('detail', request, **kwargs)\ n\n 文件 \"/Users/mbp/Projects/env/employii/lib/python2.7/site-packages/tastypie_mongoengine/resources.py\",第 390 行,在调度中\n return self._wrap_request(request, lambda : super(MongoEngineResource, self).dispatch(request_type, request, **kwargs))\n\n 文件\"/Users/mbp/Projects/env/employii/lib/python2.7/site-packages/tastypie_mongoengine/resources .py\",第 360 行,在 _wrap_request\n return fun()\n\n File \"/Users/mbp/Projects/env/employii/lib/python2.7/site-packages/tastypie_mongoengine/resources.py\ ”,林e 390, 在 \n 返回 self._wrap_request(request, lambda: super(MongoEngineResource, self).dispatch(request_type, request, **kwargs))\n\n File \"/Users/mbp/Projects/env/employii /lib/python2.7/site-packages/tastypie/resources.py\",第 458 行,在 dispatch\n response = method(request, **kwargs)\n\n File \"/Users/mbp/Projects/ env/employii/lib/python2.7/site-packages/tastypie/resources.py\",第 1408 行,在 put_detail\n updated_bundle = self.obj_update(bundle=bundle, **self.remove_api_resource_names(kwargs))\n \n 文件 \"/Users/mbp/Projects/env/employii/lib/python2.7/site-packages/tastypie_mongoengine/resources.py\",第 561 行,在 obj_update\n return self.save(bundle, skip_errors= skip_errors)\n\n 文件 \"/Users/mbp/Projects/env/employii/lib/python2.7/site-packages/tastypie_mongoengine/resources.py\",第 578 行,保存中\n 返回 super(MongoEngineResource, self).save(bundle, skip_errors)\n\n 文件\"/Users/mbp/Projects/env/employii/lib/python2.7/site-packages/tastypie/resources.py\",第 2230 行,保存中\n bundle.obj.save()\n\n 文件 \"../thecontractbox/apps/staff/models.py\",第 811 行,保存中\n return super(MHRBoxEmployee, self) .save(*args, **kwargs)\n\n 文件\"/Users/mbp/Projects/env/employii/lib/python2.7/site-packages/mongoengine/document.py\",第 294 行,在保存\n raise OperationError(message % unicode(err))\n\nOperationError: 无法保存文档(Mod on _id not allowed)\n"}
主干代码:
RAVE.Models.StaffModel = Backbone.Model.extend({
urlRoot : '/m/api/v1/empployee',
defaults: function() {
return {
active : true,
visible : true
};
},
});
var StaffCollection = Backbone.Collection.extend({
url : function(){
return '/m/api/v1/empployee/';
},
model: RAVE.Models.StaffModel,
});
这是从破坏它的主干视图调用的代码:
if( this.model.get('has_access') ){
this.model.save({'has_access' : false});
}
else{
this.model.save({'has_access' : true});
}
很明显,这是因为模型 id 不允许修改,但 sweetpie 正在尝试修改。我正在使用以下版本:
django-tastypie==0.10.0
django-tastypie-mongoengine==0.4.2
mongoengine==0.8.4
Django==1.5
【问题讨论】:
-
_id 是如何变化的?是因为它是一个字符串而不是被转换为 ObjectId 吗?
标签: javascript django backbone.js mongoengine tastypie