车辆验证默认值
车辆验证子模块,name字段如果没有赋值,我们用车辆编码和牌照填充。
首先让car_name字段必填,然后在创建的时候通过继承create事件,查找车辆对应的编号和牌照,组合后填充到name里面。关键代码:
@api.modeldef create(self, vals): car_model = self.env['nebula.car'].search([('id', '=', vals.get('car_name'))]) verify_name = '车辆编号_' + car_model.name + '__牌照_' + car_model.license_plate if vals.get('name', _('New')) == _('New'): vals['name'] = verify_name result = super(NebulaCarVerify, self).create(vals) return result
ODOO每个表都有一个字段(ID)为唯一不重复值。
车辆验证
车辆验证子模块,该模块也可以改造成类似车辆绑定模块,即每一辆车一条记录。每次车辆验证都可以修改验证日期和下一验证日,并保存修改人信息,保存后修改车辆管理子模块中的下次验证日期。
这里仅实现保存的时候,会检查该车辆下一验证日期情况,如果该车辆验证日期小于车辆验证子模块,直接替换为新日期。
1、在车辆管理(car.py)数据模型文件中添加write_car_next_verify函数,建议和本模块相关函数最好放在一起,方便管理。
# 检查传入的车辆日期大于数据库中next_verify字段的值,写入def write_car_next_verify(self, car_id, next_date): self.env["nebula.car"].search( [("id", "=", car_id), ("next_verify", "<", next_date)] ).write({"next_verify": next_date})
截图:
2、在车辆验证(car_verify.py)数据模型文件中添加新建和保存时传递参数到相关函数。
@api.modeldef create(self, vals): if vals.get('name', _('New')) == _('New'): car_model = self.env['nebula.car'].search([('id', '=', vals.get('car_name'))]) verify_name = '车辆编号_' + car_model.name + '__牌照_' + car_model.license_plate vals['name'] = verify_name if vals.get('next_date') and vals.get('active'): next_date = vals.get('next_date') car_id = vals.get('car_name') write_car_next_verify(self, car_id, next_date) result = super(NebulaCarVerify, self).create(vals) return resultdef write(self, vals): if vals.get('next_date') and self.active: next_date = vals.get('next_date') car_id = self.car_name.id write_car_next_verify(self, car_id, next_date) result = super().write(vals) return result
截图:
注:vals里面的值是本次修改或创建需要更新的键值。
self 是本条记录所有的键值。
3、引入函数声明。
我们点击红色警示符号的下来箭头,选择第一项,导入该函数定义位置。
ODOO会自动在顶部添加一行代码。
但是这个有时候在导入模块的时候会出错,我们需要用相对路径来声明。
from .car import write_car_next_verify