这是我正在研究的场景。我使用以下代码创建了一个日历事件:
calendar_obj.create(cr,uid,
{'name' : rec_res.act_ion,
'user_id' : rec_res.asgnd_to.id,
'start_date' : lambda *a:datetime.today().strftime('%m-%d-%Y'),
'stop_date' : rec_res.due_date,
'allday' : True,
'partner_ids' : [(6,0, [rec_res.asgnd_to.partner_id.id])]
},
context=context)
它会在日历上创建一个事件,但是当我尝试删除已创建的特定事件时,我遇到了问题:
File "C:\Bitnami\odoo-8.0-11\apps\odoo\Lib\site-packages\odoo-8.0_20150423-py2.7.egg\openerp\workflow\__init__.py", line 63, in trg_delete
return WorkflowService.new(cr, uid, res_type, res_id).delete()
File "C:\Bitnami\odoo-8.0-11\apps\odoo\Lib\site-packages\odoo-8.0_20150423-py2.7.egg\openerp\workflow\service.py", line 37, in new
return cls(Session(cr, uid), Record(model_name, record_id))
File "C:\Bitnami\odoo-8.0-11\apps\odoo\Lib\site-packages\odoo-8.0_20150423-py2.7.egg\openerp\workflow\helpers.py", line 13, in __init__
assert isinstance(record_id, (int, long))
AssertionError
isinstance()
是一个检查日历事件的真实ID的函数。据我了解,它不被视为真正的日历活动。
在删除日历活动时,还有什么可以解决上述问题吗?
答案 0 :(得分:0)
我正在使用Odoo 10,经过一些研究后,我发现CalendarView将要取消链接的事件的id作为unicode文本发送。这会抛出断言错误。这是CalendarView中的代码。
remove_event: function(id) {
var self = this;
function do_it() {
return $.when(self.dataset.unlink([id])).then(function() {
self.$calendar.fullCalendar('removeEvents', id);
});
}
if (this.options.confirm_on_delete) {
if (confirm(_t("Are you sure you want to delete this record ?"))) {
return do_it();
}
} else
return do_it();
},
我解决问题的方法是扩展CalendarView并修改此行为。而不是self.dataset.unlink([id])
我使用了self.dataset.unlink([Number(id)])
。这是代码。
odoo.define('my_module.calendar',function(require){ “使用严格”;
var core = require('web.core');
var calenderView = require('web_calendar.CalendarView');
var _t = core._t;
calenderView.include({
remove_event: function (id) {
var self = this;
function do_it() {
return $.when(self.dataset.unlink([Number(id)])).then(function () {
self.$calendar.fullCalendar('removeEvents', id);
});
}
if (this.options.confirm_on_delete) {
if (confirm(_t("Are you sure you want to delete this record ?"))) {
return do_it();
}
} else
return do_it();
},
});
});
我希望这会有所帮助,请原谅我的英语。