Ошибка Odoo, партнер не может дважды следовать за тем же объектом - PullRequest
0 голосов
/ 07 декабря 2018

This is the error I'm getting Я получаю эту ошибку odoo, когда пытаюсь продублировать набор записей.Я унаследовал ['mail.thread', 'ir.needaction_mixin'] в текущем классе.Я не нашел никакого решения ни в Интернете, ни в себе, ни в odoo.Все еще застряли здесь около четырех дней.

Может кто-нибудь есть идеи по этому поводу?В настоящее время я использую Odoo 10.

Код добавлен ниже:

@api.model
    def create(self, vals):
        res = super(StaffKPI, self).create(vals)

        fol = {}
        fol['res_model'] = 'staff.kpi'
        fol['res_id'] = res.id
        fol['partner_id'] = res.name_id.partner_id.id
        fol_id = self.env['mail.followers'].create(fol)
        self._cr.execute(
            'INSERT INTO mail_followers_mail_message_subtype_rel (mail_followers_id, mail_message_subtype_id) values (%s, %s)',
            (fol_id.id, 2))
        self._cr.execute(
            'INSERT INTO mail_followers_mail_message_subtype_rel (mail_followers_id, mail_message_subtype_id) values (%s, %s)',
            (fol_id.id, 1))

        subtypes = self.env['mail.message.subtype'].search([('res_model', '=', 'staff.kpi')]).ids
        if subtypes:
            for i in subtypes:
                self._cr.execute(
                    'INSERT INTO mail_followers_mail_message_subtype_rel (mail_followers_id, mail_message_subtype_id) values (%s, %s)',
                    (fol_id.id, i))
        old_name = res.name
        res.write({'name': ''})
        res.write({'name': old_name})
        return res

Заранее благодарен.

Ответы [ 2 ]

0 голосов
/ 18 января 2019

Вы можете использовать этот код:

class Followers(models.Model):
   _inherit = 'mail.followers'

   @api.model
   def create(self, vals):
        if 'res_model' in vals and 'res_id' in vals and 'partner_id' in vals:
            dups = self.env['mail.followers'].search([('res_model', '=',vals.get('res_model')),
                                           ('res_id', '=', vals.get('res_id')),
                                           ('partner_id', '=', vals.get('partner_id'))])
            if len(dups):
                for p in dups:
                    p.unlink()
        return super(Followers, self).create(vals)
0 голосов
/ 07 декабря 2018

Вы должны использовать встроенные функции mail.thread для добавления подписчиков.Вы всегда должны избегать использования прямых запросов!

Следующий код будет охватывать добавление подписчика и подтипа (я не понял записи name в конце):

@api.model
def create(self, vals):
    res = super(StaffKPI, self).create(vals)
    subtype_ids = self.env['mail.message.subtype'].search(
        [('res_model', '=', 'staff.kpi')]).ids
    res.message_subscribe(
        partner_ids=[res.name_id.partner_id.id],
        subtype_ids=subtype_ids)
    # other logic
    return res
...