Odoo13:如何通过控制器将关注者分配给记录

问题描述

在我的网络表单控制器中,我试图将在网络表单中输入的电子邮件地址分配给给定的记录。这是我的控制器中负责此操作的代码片段

if 'followers' in request.params:
            raw_emails = request.httprequest.form.get('followers').split(',')
            emails = [user.strip() for user in raw_emails] 
            #emails = ['foo@bar.com','foo2@bar.com',..]

            for email in emails:
                follower = request.env['res.users'].search(
                    [('email','=',email)])
                if bool(follower):
                    reg = {
                        'res_id': new_ticket.id,'res_model': 'helpdesk.ticket','partner_id': follower.id
                    }
                    request.env['mail.followers'].create(reg)
                else:
                    message = "TO DO: Add {} to the system and make the user a follower of this ticket".format(
                        email)
                    new_ticket.message_post(body=message)

这样我得到了奇怪的结果,即在网络表单上输入“用户 A”作为关注者后,“用户 B”被添加为关注者。我认为问题可能出在错误用户记录被加载到 follower 变量中,但我不明白为什么。任何反馈将不胜感激。

解决方法

您可以使用 message_subscribe 方法将关注者添加到记录集。

def message_subscribe(self,partner_ids=None,channel_ids=None,subtype_ids=None):
""" 向记录集添加关注者的主要公共 API。其主要目的是
在调用 _message_subscribe 之前执行访问权限检查。 """

您已经有一个帐户移动示例,在 message_new 方法中添加了合作伙伴列表。

# Assign followers.
all_followers_ids = set(partner.id for partner in followers + senders + partners if is_internal_partner(partner))
move.message_subscribe(list(all_followers_ids))