删除特定事件时出错

时间:2016-04-01 09:58:19

标签: python-2.7 openerp odoo-8

这是我正在研究的场景。我使用以下代码创建了一个日历事件:

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的函数。据我了解,它不被视为真正的日历活动。

在删除日历活动时,还有什么可以解决上述问题吗?

1 个答案:

答案 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();
    },
});

});

我希望这会有所帮助,请原谅我的英语。