Day20 Let's ODOO: Scheduled Actions

有时我们背景需要一些定时任务,Odoo同样也可以设定,依照惯例我们来写一个范例,每半年学生的成绩就要归零重新计算。

首先在models/res_student.xml 新增方法:

class ResStudent(models.Model):
    _name = 'res.student'
    _inherit = 'res.partner'
    _description = 'Student'

    nickname = fields.Char(string='绰号')
    math_score = fields.Float(string='数学成绩')
    chinese_score = fields.Float(string='国文成绩')
    avg_score = fields.Float(string='学期平均', compute='_compute_score')
    birthday = fields.Date(string='生日', required=True)
    school_id = fields.Many2one('res.company', string='所属学校')
    school_city = fields.Char(string='所在城市', related='school_id.city')
    senior_id = fields.Many2one('res.student', string='直属学长姐')
    junior_ids = fields.One2many('res.student', 'senior_id', string='直属学弟妹')
    teacher_ids = fields.Many2many('res.partner', string='指导老师', domain=[('is_company', '!=', True)])
    gender = fields.Selection([("male", "男"), ("female", "女"), ("other", "其他")], string='性别')
    is_leadership = fields.Boolean(default=False)
    is_active = fields.Boolean(default=True)
    channel_ids = fields.Many2many('mail.channel', 'mail_channel_profile_partner', 'partner_id', 'channel_id', copy=False)

    
    def _init_score(self):
        for record in self:
            record.math_score = 0.0
            record.chinese_score = 0.0

方法单纯就是将两项成绩设为零,而平均成绩我们是用计算的,所以不用设定。

并增加档案/data/res_student_cron.xml

<?xml version="1.0" encoding="utf-8"?>
<odoo>
    <data>
       <record id="student_cron" model="ir.cron">
           <field name="name">Student Score Init Cron Job</field>
           <field name="model_id" ref="model_res_student"/>
           <field name='interval_number'>6</field>
           <field name='interval_type'>months</field>
           <field name="numbercall">-1</field>
           <field name="doall" eval="False"/>
           <field name="code">model._init_score()</field>
           <field name="state">code</field>
       </record>
    </data>
</odoo>

设定cron job文件

id:自定义,不重复即可

model:固定为ir.cron

name:cron job名称

model_id:关联model,写法为 "model" + Model Name

interval_type:执行单位,分别有monthsweeksdayshoursminutes

interval_number :填入数字,配合interval_type ,本范例代表六个月执行一次。

numbercall :总共执行几次,如果是-1,代表不断执行。

doall :布林值,如果没执行到重启时会不会执行。

statecode:以code的方式执行,参照为model内的哪个方法。

依照惯例将此文件加入__manifest__.py内:

'data': [
        'data/res_student_cron.xml'
		...
    ],

我们重启後便可以在Odoo Scheduled Actions内看到,记得要开启开发者模式:

https://ithelp.ithome.com.tw/upload/images/20211005/20130896mK2jpeBm0b.png

这里笔者先将时间改为一分钟执行一次,来检查是否正确执行,log内有cron job执行结果:

https://ithelp.ithome.com.tw/upload/images/20211005/201308962AUg2E6oar.png

Student Model内的分数也已经清空

https://ithelp.ithome.com.tw/upload/images/20211005/20130896hRePbobjkF.png
今天介绍就到这里了,明天我们来介绍流水号的设定


<<:  从零开始的8-bit迷宫探险【Level 27】神助攻-老弟帮我配个音效

>>:  [DAY-21] 获得工作机会 谈条件 做出决定

【第20天】训练模型-模型组合与辨识isnull(一)

摘要 作业流程 获得各模型800字机率表 安装R与RStudio 内容 作业流程(今日进度为1.1~...

Day-12 认识Excel枢纽分析表

今日练习档 ԅ( ¯་། ¯ԅ) 你是不是听到枢纽分析表就会腿软!你是不是听到枢纽分析表就想放弃!今...

Day12 职训(机器学习与资料分析工程师培训班): Python程序设计

今天教学Numpy & Pandas & Matplotlib import pan...

资料人员来学C++ #随堂笔记 Day2

一、运算子 有一个library cmath提供一些计算的函式, 例如, #include std:...

Day4. 如何寻找设计切入点

在做新产品开发时,对於用户需求收集,寻找产品切入点,我们常有一个典型的错误假设,那就是认为用户最知...