繁体   English   中英

如何更新另一个模型。 Many2one 字段。 Odoo-14

[英]How to update another model. Many2one field. Odoo-14

我将 account.reconciliation.act 模型中的数据创建到 direct.statistics 模型中然后我想更改 account.reconciliation.act 中的一些数据。 并且它在 direct.statistics 模型中没有变化。 我已经编写了一个 write 方法,我想用它来更新 direct.statistic 模型中的数据。 但它不起作用。 我做错了什么?

我收到错误 TypeError: write() 需要 2 个位置参数,但给定了 3 个1.py

class AccountReconciliationAct(models.Model):
    _name = "account.reconciliation.act"
     direct_statistics_id = fields.Many2one(comodel_name="direct.statistics", string="Direct Statistics")

    @api.model
    def create(self, values):
      ....
        else:
            self.env["direct.statistics"].create({
                "direct_advertiser_id": record_id.partner_id.id,
                "direct_payment_net_id": record_id.payment_net_id.id,
                "direct_currency_id": record_id.currency_id.id,
                "direct_last_act_date": record_id.reconciliation_act_date,
                "direct_total_amount": record_id.amount_total,
                "direct_department_ids": record_id.reconciliation_act_line_ids.department_id
            })
        return record_id

    @api.model
    def write(self, values):
        res = super().write(values)
        self.env["direct.statistics"].update({
            "direct_advertiser_id": self.partner_id.id,
            "direct_payment_net_id": self.payment_net_id.id,
            "direct_currency_id": values.get('currency_id.id'),
            "direct_last_act_date": values.get('reconciliation_act_date'),
            "direct_total_amount": values.get('amount_total'),
            "direct_department_ids": values.get('reconciliation_act_line_ids.department_id'),
        })
        return res

2.py

class DirectStatistics(models.Model):
    _name = "direct.statistics"
    _description = "Direct statistics"
    _rec_name = "direct_advertiser_id"

    direct_advertiser_id = fields.Many2one(comodel_name="res.partner", string="Advertiser")
    direct_manager_id = fields.Many2one(related="direct_advertiser_id.manager_id", string="Manager")
    direct_payment_net_id = fields.Many2one(related="direct_advertiser_id.payment_net_id", string="Net")
    direct_currency_id = fields.Many2one(comodel_name="res.currency", string="Currency")
    direct_conversion_ids = fields.Many2many(comodel_name="affise.conversion", string="Conversions")
    direct_last_act_date = fields.Date(string="Last Act Date", compute="_compute_direct_last_act_date", store=True)
    direct_first_conversion_date = fields.Date(
        string="First Conversion Date", compute="_compute_direct_first_conversion_date", store=True
    )
    direct_department_ids = fields.Many2many(
        comodel_name="affise.department", compute="_compute_direct_department_ids", string="Department"
    )
    direct_reconciliation_act_ids = fields.Many2many(
        comodel_name="account.reconciliation.act", string="Created Acts", domain=[("state", "!=", "cancel")]
    )

    direct_total_amount = fields.Monetary(
        currency_field="direct_currency_id", string="Total Acts")
class AccountReconciliationAct(models.Model):
    _name = "account.reconciliation.act"

    direct_statistics_id = fields.Many2one(comodel_name="direct.statistics", string="Direct Statistics")

    @api.model
    def create(self, values):
      record_id = super(AccountReconciliationAct, self).create(values)
      ....
        else:
            record_id.direct_statistics_id = self.env["direct.statistics"].create({
                "direct_advertiser_id": record_id.partner_id.id,
                "direct_payment_net_id": record_id.payment_net_id.id,
                "direct_currency_id": record_id.currency_id.id,
                "direct_last_act_date": record_id.reconciliation_act_date,
                "direct_total_amount": record_id.amount_total,
                "direct_department_ids": record_id.reconciliation_act_line_ids.department_id
            })
        return record_id

    def write(self, values):
        res = super(AccountReconciliationAct, self).write(values)
        self.direct_statistics_id.update({
            "direct_advertiser_id": self.partner_id.id,
            "direct_payment_net_id": self.payment_net_id.id,
            "direct_currency_id": values.get('currency_id.id'),
            "direct_last_act_date": values.get('reconciliation_act_date'),
            "direct_total_amount": values.get('amount_total'),
            "direct_department_ids": values.get('reconciliation_act_line_ids.department_id'),
        })
        return res

您需要做的第一件事是将创建的对象写入direct_statistics_id字段。 这样做是为了您可以更新write方法中的值。 也不需要为写入方法调用@api.model

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM