Odoo mail.activity создание - PullRequest
       89

Odoo mail.activity создание

0 голосов
/ 07 августа 2020

Я пытаюсь создать настраиваемое действие, используя модель 'mail.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 доступ к позиции 0 и 1 в массиве cra sh моей программы, но я не знаю почему.

Вот мой код для создания активности:

@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 есть что-то, о чем я не знаю, или что-то еще.

Ответы [ 2 ]

0 голосов
/ 11 августа 2020

Я уже понял, что было не так, я вызвал 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
0 голосов
/ 07 августа 2020

Вы получили эту ошибку, потому что Odoo ожидает список пар (id, text_repr) для каждой записи и, вероятно, обнаружил пустой список (возвращенный результат будет использоваться для создания словарей непосредственно из последовательностей пар ключ-значение для подготовки отображаемых имен ).

Убедитесь, что результат, возвращенный методом name_get соискателя вакансии, представляет собой список пар.

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