【问题标题】:How to add new record to One2Many field automatically via create function in different model?如何通过不同模型中的创建功能自动将新记录添加到 One2Many 字段?
【发布时间】:2021-10-05 08:08:43
【问题描述】:

我编写了一个方法 _update_config_list,当在 Account.Analytic.Line 中创建记录时应该自动调用该方法。如果在 One2Many 字段中未自动找到 Employee,则此方法应在 One2Many 字段中创建新记录。 但是我的代码什么也没做。

from datetime import timedelta

from odoo import api, fields, models, tools
from odoo.exceptions import UserError, AccessError, ValidationError


class RoleSync(models.Model):

    _inherit = 'account.analytic.line'

    role_field_id = fields.Many2one(
        string='Role', compute='_compute_role', comodel_name='project.roles')
    # role_addline = fields.Many2one('project.roles', compute="role_addline")
    remaining_time_id = fields.Float(related='task_id.remaining_hours', readonly=True,
                                     string="Time remaining  ")

    def _update_config_list(self):
        list_id = []
        for rec in self:
            if rec.project_id:
                list = self.env['project.project'].search(
                    [('name', '=', rec.project_id.name)])
                for val in list.list_id:
                    if rec.employee_id != val.emp_id:
                        list_id.append(rec.employee_id)
                list_id = set(list_id)
                list.update({'list_id': list_id})

    @api.model
    def create(self, values):
        result = super(RoleSync, self).create(values)
        self._update_config_list()
        return result

这是我的 list_id 类:

from datetime import timedelta, datetime
from calendar import monthrange


from odoo import api, fields, models, tools
from odoo.exceptions import UserError, AccessError, ValidationError
from odoo.tools import date_utils


#-----------------------------------------------------------------------------------------------#


class ProjectClass(models.Model):
    _inherit = 'project.project'

    list_id = fields.One2many(
        'roles.roles', 'project_id', string="Config_List")

class RolesClass(models.Model):
    _name = 'roles.roles'

    emp_id = fields.Many2one('hr.employee', string="Employee")
    role_id = fields.Many2one('project.roles', string="Role")
    project_id = fields.Many2one(
        'project.project', string="Project", readonly='1')

【问题讨论】:

  • 如果不知道list_id 是什么或将会是什么,就很难理解你的代码。请添加有关该内容的代码(部分)。然后create() 中有一个小错误:你在self 上调用_update_config_list()。此方法对记录进行迭代,但在此上下文(创建)中 self 是一个空记录集。你应该在 result 上调用它,它是创建记录的记录集。
  • 是的,我忘记包含我的 One2Many 字段的代码,这是我的列表。它有 3 个字段,一个是 emp_id,我必须自动创建一个新条目。

标签: odoo odoo-13 one2many


【解决方案1】:

您可以使用 Odoo 的 X2Many 表示法:https://www.odoo.com/documentation/14.0/developer/reference/addons/orm.html#odoo.models.Model.write

在您的情况下,它将是 0(创建)或 4(链接):

rec.write({'list_id': [(0, 0, {values})]})

# OR

rec.write({'list_id': [(4, id)]})

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-10-23
    • 1970-01-01
    • 2021-08-19
    • 2011-04-10
    • 1970-01-01
    • 2019-01-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多