代码之家  ›  专栏  ›  技术社区  ›  Pablo Escobar

Odoo错误,合作伙伴不能跟随同一对象两次

  •  2
  • Pablo Escobar  · 技术社区  · 7 年前

    This is the error I'm getting ['mail.thread', 'ir.needaction_mixin'] 在当前的类中。我没有在网上、我自己或奥多那里找到任何解决方案。仍然困在这里四天左右。

    有人能想到这个吗?目前我正在使用奥多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 回复  |  直到 7 年前
        1
  •  3
  •   CZoellner    7 年前

    你应该使用 mail.thread s内置函数以添加追随者。您应该始终避免使用直接查询!

    下面的代码将介绍follower和子类型adding(我不理解 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
    
        2
  •  1
  •   Abdelmajid ELHAMDAOUI    7 年前

    您可以使用以下代码:

    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)
    
        3
  •  0
  •   khelili miliana    4 年前

    此错误是因为SQL\u约束

    ('mail_followers_res_partner_res_model_id_uniq', 'unique(res_model,res_id,partner_id)', 'Error, a partner cannot follow twice the same object.'), ...
    

    位于 /addons/mail/models/mail_followers.py ,创建对象时,当前用户会在该模型中自动添加两次作为跟随者 ['mail.followers'] ,因此sql_约束将是: Unique('your_model', id_of_record_you_want_to_create, current_user) 两次

    解决方案:您可以使用选项 .with_context(mail_create_nosubscribe=True)

    例如:

    self.env['helpdesk.ticket'].with_context(mail_create_nosubscribe=True).create({
       'name' : 'ticket_name',
       'partner_id' : 22,
       'team_id' : 2,
    }) 
          
          
    
    推荐文章