【问题标题】:How to copy one2many filed in odoo?如何在odoo中复制one2many字段?
【发布时间】:2021-09-21 08:41:50
【问题描述】:

我在复制 one2many 字段时遇到问题。我为项目创建分配字段:

        assignment_ids = fields.One2many(
        string='Project Assignments',
        comodel_name='project.assignment',
        inverse_name='project_id',
        track_visibility='onchange',)

首先我尝试添加属性 copy=True 然后它抛出一个错误

验证约束时出错

预期的单例:project.assignment(3, 4)

这也有同样的单例错误

@api.multi
def copy(self, default=None):
    default = default or {}
    for rec in self:
        list_assignment = self.assignment_ids
        new_assignment = []

        for assignment in list_assignment:
            new_assignment.append((0, 0, {'id': assignment.id,
                                        'role_id': assignment.role_id.id,
                                        'date_join': date.today(),
                                        'user_id': assignment.user_id.id,
                                        }))

    default['assignment_ids'] = new_assignment

    return super(ProjectProject, self).copy(default)

然后我尝试覆盖复制功能。该作业有一个新项目的副本,但旧项目的作业已被删除。

@api.multi    
def copy(self, default=None):
        default = default or {}
        list_assignment = self.assignment_ids

        default['assignment_ids'] = (6, True, list_assignment)

        return super(ProjectProject, self).copy(default)

那么我该如何复制这个 one2many 字段呢?

非常感谢!!!

【问题讨论】:

  • 在第一个循环中,self 可以包含多条记录。使用rec.assignment_ids 而不是self.assignment_ids 以避免Expected singleton 错误

标签: copy odoo one2many


【解决方案1】:

当我将 one2many 从销售复制到发票中的 one2many 字段时,此代码有效。

def _prepare_invoice(self):
    self.ensure_one()
        res=return super([Your_Class_Name], self)._prepare_invoice()
# Loop in your One2many field in sale order
         one2many_vals =[]
          for l in self.order_id.[Your_One2many]:
              one2many_vals.append(
    (0,0,{'One2many_column1_in_invoice_One2Many':l.[One2many_column1_in_sale_One2Many],
          'One2many_column2_in_invoice_One2Many':l.[One2many_column2_in_sale_One2Many],
          'One2many_column3_in_invoice_One2Many':l.[One2many_column3_in_sale_One2Many]
    }))
res['One2many_field_name_in_invoice'] = one2many_vals
return res

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-14
    • 1970-01-01
    • 2020-08-31
    • 2020-04-13
    • 1970-01-01
    • 2021-06-29
    相关资源
    最近更新 更多