[英]Odoo 10 - Overloading a Python Method
我有个问题。 我有一个称为重载write()方法的函数。 我有另一个功能无关,但它修改了字段。
除了它必然会调用调用第一个函数的write方法...
当某些字段受到影响时,是否有一种方法可以不调用write方法?
这是我的代码:
Write()方法:
# 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()方法:
@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方法:
# 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()方法的方法。 你有想法吗 ?
谢谢
每次更新记录上的字段时,都假定将调用write
函数。 这是内置于Odoo ORM。
例如,如果我从数据库中获取记录。
partner = env['res.partner'].browse(1)
然后我更新此伙伴记录中的任何字段,它将调用write
函数来设置它们:
# these each will call `write` at some point
partner.name = 'abc'
partner.update({'street1': 'My Street'})
我强烈建议您阅读核心存储库( odoo/models.py
)中odoo/models.py
class BaseModel
定义中的基本ORM方法。 通过unlink
, write
, _write
, update
, create
等等,可以更好地掌握幕后发生的事情。
当然,通过官方ORM文档阅读也不会受到伤害。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.