首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Odoo 10 -重载Python方法

Odoo 10 -重载Python方法
EN

Stack Overflow用户
提问于 2019-05-21 15:39:53
回答 1查看 175关注 0票数 0

我有个问题。我有一个重载write ()方法的函数。我有另一个函数,这个函数没有任何作用,但它可以修改字段。

除了它必须调用调用第一个函数的write方法...

当某些字段受到影响时,有没有办法让write方法不被调用?

下面是我的代码:

Write ()方法:

代码语言:javascript
运行
复制
# Appel cette méthode quand on modifie un enregistrement
    @api.multi
    def write(self, vals):
        result = super(ResPartnerSchool, self).write(vals)
        self.no_duplicate_school_dates()
        if not self.env.context.get('tracking_disable'):
            self.smart_synchronization()
        return result

smart_synchronization()方法:

代码语言:javascript
运行
复制
@api.multi
def smart_synchronization(self):
    for record in self:
        if record.school_statut == "valid":
            record.create_compte_in_smart()
            if record.school_send_onde and record.school_date_status == fields.Date.today():
                record.prepare_files_for_onde()

当我使用此方法时,将调用prepar_files_to_ONDE方法:

代码语言:javascript
运行
复制
# Méthode CRON pour fermetures contrats à une date saisie par l'agent
    @api.model
    def run_close_old_contracts(self):
        _logger.info("CRON Called for to verify closed dates contracts")
        today = fields.Date.today()
        domain = ['|', '|', ("half_pension_unsubscribe", "=", True),
                            ("nursery_morning_unsubscribe", "=", True),
                            ("nursery_evening_unsubscribe", "=", True)]
        for contract in self.search(domain):
            vals = {}
            if contract.school_registration >= today <= contract.school_end_date:
                if contract.half_pension_unsubscribe \
                        and contract.half_pension_unsubscribe_date <= today \
                        and contract.half_pension_status == "2":
                    vals["half_pension_status"] = "3"
                    _logger.info("Contract half pension closed for : " + contract.partner_id.name)
                if contract.nursery_morning_unsubscribe \
                        and contract.nursery_morning_unsubscribe_date <= today \
                        and contract.nursery_status_morning == "2":
                    vals["nursery_status_morning"] = "3"
                    _logger.info("Contract nursery morning closed for : " + contract.partner_id.name)
                if contract.nursery_evening_unsubscribe \
                        and contract.nursery_evening_unsubscribe_date <= today \
                        and contract.nursery_status_evening == "2":
                    vals["nursery_status_evening"] = "3"
                    _logger.info("Contract nursery evening closed for : " + contract.partner_id.name)
                if vals:
                    contract.write(vals)

我的write ()方法就是在这一层被调用的。你有什么想法吗?

谢谢

EN

回答 1

Stack Overflow用户

发布于 2019-05-21 22:03:21

每当您更新记录上的字段时,假设要调用write函数。这是内置在Odoo ORM中的。

例如,如果我从数据库中抓取一条记录。

代码语言:javascript
运行
复制
partner = env['res.partner'].browse(1)

然后我更新这个合作伙伴记录上的任何字段,它将调用write函数来设置它们:

代码语言:javascript
运行
复制
# these each will call `write` at some point
partner.name = 'abc'
partner.update({'street1': 'My Street'})

我强烈建议您通读核心存储库(odoo/models.py)中的class BaseModel定义中的基本ORM方法。浏览unlinkwrite_writeupdatecreate等可以让你更好地了解幕后的情况。

当然,通读official ORM docs也没什么坏处。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56233432

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档