如何解决放置多个附件时出现 Odoo Singleton 错误
def action_send_card(self):
template_id = self.env.ref('library.agreement_email_template').id
data_id = self.env['ir.attachment'].browse(self.agreement_file.id)
template = self.env['mail.template'].browse(template_id)
for pdf in data_id:
template.attachment_ids = [(3,pdf.id)]
template.attachment_ids = [(6,[pdf.id])]
template.send_mail(self.id,force_send=True)
return True
我用一个文件试过,效果很好,但是当我尝试两个或更多文件时,它给了我同样的错误。
ValueError:预期的单例:ir.attachment(260,257)
协议文件声明如下:
agreement_file = fields.Many2many(
'ir.attachment','class_ir_attachments_rel','class_id','attachment_id',string="Agreement files",required=False)
解决方法
self
可能包含多个记录集和需要单个记录的方法。
尝试使用以下代码:
def action_send_card(self):
template_id = self.env.ref('library.agreement_email_template').id
for record in self:
data_id = self.env['ir.attachment'].browse(record.agreement_file.id)
template = self.env['mail.template'].browse(template_id)
for pdf in data_id:
template.attachment_ids = [(3,pdf.id)]
template.attachment_ids = [(6,[pdf.id])]
template.send_mail(record.id,force_send=True)
return True
有关此问题的详细信息:https://odedrabhavesh.blogspot.com/2017/02/valueerror-expected-singleton-in-odoo.html
,agreement_file
是 amny2many,对于您的特定情况,分配了多个 ir.attachment
记录。第 3 行 data_id = self.env['ir.attachment'].browse(self.agreement_file.id)
出现问题,因为 agreement_file
是多条记录的记录集,您必须访问 ids
而不是 id
。
def action_send_card(self):
template_id = self.env.ref('library.agreement_email_template').id
data_id = self.env['ir.attachment'].browse(self.agreement_file.ids)
template = self.env['mail.template'].browse(template_id)
for pdf in data_id:
template.attachment_ids = [(3,pdf.id)]
template.attachment_ids = [(6,[pdf.id])]
template.send_mail(self.id,force_send=True)
return True
或者更简单
def action_send_card(self):
template = self.env.ref('library.agreement_email_template')
template.attachment_ids = [(6,self.agreement_file.ids)]
template.send_mail(self.id,force_send=True)
return True
,
我在这里尝试了一些解决方案,但仍然没有用。我更改了代码中的某些内容,并以某种方式找到了解决方案。在这里
echo %username%
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。