原始需求图:
车辆编号: | 001 | 牌照: | 沪A7868 | 绑定日期: | 2020/7/9 |
教练工号: | 111 | 教练姓名: | 王五 | 解绑日期: | |
新增数据模型
models目录新建car_bind.py数据模型文件,代码如下:
from odoo import fields, modelsclass NebulaCarBind(models.Model): _name = "nebula.car.bind" _description = "车辆绑定" _order = 'name' active = fields.Boolean('是否有效', default=True) name = fields.Char('绑定简情', size=30) car_name = fields.Many2one('nebula.car', string='车辆编号', index=True, size=8, copy=False, domain=[('active', '=', True)]) license_plate = fields.Char('车辆牌照', related='car_name.license_plate', store=True) teacher_name = fields.Many2one('nebula.teacher', string='教练编号', index=True, size=8, copy=False, domain=[('active', '=', True)]) teacher_full_name = fields.Char('教练姓名', related='teacher_name.full_name', store=True) bind_date = fields.Date('绑定日期') unbind_date = fields.Date('解绑日期') date_docket = fields.Datetime('单据日期', required=True, readonly=True, index=True, default=fields.Datetime.now) user_id = fields.Many2one('res.users', string='创建人', index=True, readonly=True, default=lambda self: self.env.user) note = fields.Text('备注') # TODO: 一辆车只能有一个教练,一个教练也只能有一辆车
这里用了一个domain,将active=True的数据过滤出来供选择。
将该文件名添加到models目录下__init__.py文件中,之前已经有演示。
设置访问权限
在security目录下的ir.model.access.csv新增一行权限记录。
access_nebula_car_bind,nebula.car.bind,model_nebula_car_bind,group_peijia_manager,1,1,1,1
创建视图层
在views目录新增car_bind_views.xml文件,先用默认方式展示即可,待模块加载成功后再逐步修改和完善文件,内容如下:
<?xml version="1.0" encoding="utf-8"?><odoo> <act_window id="peijia.action_car_bind_views" name="车辆绑定" res_model="nebula.car.bind" view_mode="tree,form" /><?xml version="1.0" encoding="utf-8"?><odoo> <act_windowid="peijia.action_car_bind_views"name="车辆绑定" res_model="nebula.car.bind" view_mode="tree,form" />
修改peijia目录下__manifest__.py文件中data段,在views/car_type_views.xml前新增views/car_bind_views.xml文件名。
在views目录下car_views.xml文件,教练管理菜单项下添加菜单项指向该子模块,并修改公司费用sequence序号,代码:
<menuitem id="menu_car_bind_views" name ="车辆绑定" parent="menu_peijia_car_data" sequence="120" action="peijia.action_car_bind_views"/>
截图:
重启后,更新陪驾模块,查看是否已经有相关菜单和界面。正常后读者可继续修改视图层。
界面展示
列表效果:
表单效果: