Odoo mail.activity 创建

Odoo mail.activity creation

我正在尝试使用 'mail.activity' 模型和自定义值创建自定义 activity,并显示此错误:

File "/usr/lib/python3/dist-packages/odoo/addons/mail/models/mail_activity.py", line 108, in 
_compute_res_name
activity.res_name = self.env[activity.res_model].browse(activity.res_id).name_get()[0][1]
IndexError: list index out of range

我认为是因为在核心 mail.activity 模型中,访问数组中的 01 位置使我的程序崩溃,但我不知道为什么。

这是我创建 activity 的代码:

@api.model
def create(self, vals)
    user_id = self.user_id
    date_deadline = datetime.now() + timedelta(days=7)

    data = {
        'res_id': self.id,
        'res_model_id': self.env['ir.model'].search([('model', '=', 'hr.applicant')]).id,
        'user_id': user_id.id,
        'summary': 'foo bar',
        'activity_type_id': self.env.ref('custom.activity_applicant').id,
        'date_deadline': date_deadline
        }
    self.env['mail.activity'].create(data)
    return super().create(vals)

字段 res_id 中有我不知道的内容或其他内容。

你得到这个错误是因为 Odoo 期望每条记录都有一个 (id, text_repr) 对的列表,它发现可能是一个空列表(返回的结果将用于直接从 key-value 的序列构建字典对准备显示名称)。

确保hr应聘者name_get方法返回的结果是一个pair列表

@api.multi
def name_get(self):
    result = []
    res = super(HrApplicant, self).name_get()
    # the result list should be filled with pairs
    return result

我已经知道出了什么问题,我什至在创建对象之前就调用了 self.id,然后 id 是一个空值。我在这部分代码之前更改了对象创建,它工作正常。

@api.model
def create(self, vals)
    new = super().create(vals)
    user_id = new.user_id
    date_deadline = datetime.now() + timedelta(days=7)

    data = {
        'res_id': new.id,
        'res_model_id': self.env['ir.model'].search([('model', '=', 'hr.applicant')]).id,
        'user_id': user_id.id,
        'summary': 'foo bar',
        'activity_type_id': self.env.ref('custom.activity_applicant').id,
        'date_deadline': date_deadline
        }
    self.env['mail.activity'].create(data)
    return new