Odoo 10错误-我需要将one2many值发送到另一个具有相同one2many字段的模型

时间:2018-09-09 09:01:12

标签: odoo-10

我收到Odoo 10错误。

我需要将one2many值发送到另一个具有相同one2many字段的模型。

当我使用工作流发送one2many字段时,出现此错误,预期是单例(1,4,6)。

我该如何解决这个问题?

file_upload_material = fields.One2many('file.decision','param_two')

@api.multi
def confirm(self):
    file = self.file_upload_material.file
    name = self.file_upload_material.name
    if self.name:
        media_and_media = {
            'name': self.name,
            'instructions': self.instructions,
            'task_id': self.task_id.id,
            'descriptions': self.descriptions,
            'date_from_exec': self.date_from_exec,
            'date_to_exec': self.date_to_exec,
            'date_from': self.date_from,
            'task_name': self.task_name,
            'file_upload_material': [(0, 0, {
                'name': name,
                'file': file
            })],

        }
        self.env['my.task.log'].create(media_and_media)
        self.state = 'unread'


        class LogMydecision(models.Model):
             _name = "my.task.log"
       file_upload_material = fields.One2many('file.decision','param_one')


       class FileUpload(models.Model):

            _name = 'file.decision'

            name = fields.Char('File Name')
            file = fields.Binary('Upload File')
            param_one = fields.Many2one('my.task.log)
            param_two = fields.Many2one('task.log)

1 个答案:

答案 0 :(得分:0)

您的错误似乎与包含记录集的字段file_upload_material的值有关,您正在使用它,就好像仅包含一条记录(如m2o)一样,特别是在以下行上:

file = self.file_upload_material.file
name = self.file_upload_material.name

您的问题可以这样解决:

media_and_media = {
    'name': self.name,
    'instructions': self.instructions,
    'task_id': self.task_id.id,
    'descriptions': self.descriptions,
    'date_from_exec': self.date_from_exec,
    'date_to_exec': self.date_to_exec,
    'date_from': self.date_from,
    'task_name': self.task_name,
    'file_upload_material': [(0, 0, {
        'name': fum.name,
        'file': fum.file
    }) for fum in self.file_upload_material],
}

似乎您正在复制文件的值。通过在Confirm方法中进行复制来复制决策记录,您可以将字段更改为m2m并重新使用它,也可以使用(4, id)或(6,0,[ids])而不是使用(0,0,{vals}),就像这样:

media_and_media = {
    'name': self.name,
    'instructions': self.instructions,
    'task_id': self.task_id.id,
    'descriptions': self.descriptions,
    'date_from_exec': self.date_from_exec,
    'date_to_exec': self.date_to_exec,
    'date_from': self.date_from,
    'task_name': self.task_name,
    'file_upload_material': [(6, 0, self.file_upload_material.ids)],
}

防止记录重复。另外,我建议您将file_upload_material关系的字段切换为m2m