博客
关于我
odoo13 自定义模块开发简介 windows10环境(三)
阅读量:349 次
发布时间:2019-03-04

本文共 6071 字,大约阅读时间需要 20 分钟。

一、高级视图

1、树视图

树视图可以采用补充属性来进一步自定义其行为:

decoration-{$name}

允许根据相应记录的属性更改行文本的样式。

值是Python表达式。对于每条记录,将使用记录的属性作为上下文值评估表达式,如果为true,则将相应样式应用于行。其他上下文值是 uid(当前用户的ID)和current_date(当前日期,形式为字符串yyyy-MM-dd)。

{$name}可以是bffont-weight: bold), (it ),font-style: italic或任何枚(danger, infomutedprimarysuccesswarning)。

列表着色

修改session树视图,使持续时间少于5天的会话显示为蓝色,而持续时间超过15天的会话显示为红色。

修改views/openacademy.xml中session树视图如下

session.tree
openacademy.session

运行效果

2、行事历

 将记录显示为日历事件。它们的根元素是<calendar>,最常见的属性是:

color

用于颜色分割的字段名称。颜色将自动分配给事件,但是相同颜色段(其@color字段具有相同值的记录)中的事件将被赋予相同的颜色。

date_start

记录中包含事件开始日期/时间的字段

date_stop (可选的)

记录的字段,其中包含事件的结束日期/时间

string

记录的字段以定义每个日历事件的标签

修改models\models.py文件中session对象,增加一个计划属性end_date,其值由start_date和duration计算得出。

# -*- coding: utf-8 -*-from datetime import timedeltafrom odoo import models, fields, api, exceptionsclass Session(models.Model):#...        taken_seats = fields.Float(string="Taken seats", compute='_taken_seats')        #add end_date        end_date = fields.Date(string="End Date", store=True, compute='_get_end_date', inverse='_set_end_date')#...#add compute function    @api.depends('start_date', 'duration')    def _get_end_date(self):        for r in self:            if not (r.start_date and r.duration):                r.end_date = r.start_date                continue            # Add duration to start_date, but: Monday + 5 days = Saturday, so            # subtract one second to get on Friday instead            duration = timedelta(days=r.duration, seconds=-1)            r.end_date = r.start_date + duration    def _set_end_date(self):        for r in self:            if not (r.start_date and r.end_date):                continue            # Compute the difference between dates, but: Friday - Monday = 4 days,            # so add one day to get 5 days instead            r.duration = (r.end_date - r.start_date).days + 1

修改views/openacademy.xml,增加行事历视图

session.calendar
openacademy.session
Sessions
openacademy.session
tree,form,calendar

 

运行效果

3、搜索视图

搜索视图<field>元素可以具有@filter_domain,以覆盖为在给定字段上进行搜索而生成的域。在给定的域中, self代表用户输入的值。在下面的例子中,它是用来在两个字段进行搜索namedescription

搜索视图还可以包含<filter>元素,这些元素充当预定义搜索的切换。筛选器必须具有以下属性之一:

domain

将给定的域添加到当前搜索中

context

在当前搜索中添加一些上下文;使用键group_by将结果按给定的字段名称分组

修改views/openacademy.xml中course视图

  1. 添加一个按钮以过滤课程搜索视图中当前用户负责的课程。使其默认为选中状态。
  2. 添加按钮以按负责任的用户对课程进行分组
Courses
openacademy.course
tree,form

Create the first course

运行效果

 

4、图表视图

图形视图允许对模型进行汇总概述和分析,其根元素为<graph>

图表视图具有4种显示模式,使用@type属性可以选择默认模式 。

Bar(默认)

在条形图中,第一维用于定义水平轴上的组,其他维用于定义每个组内的聚合条。

默认情况下,条形是并排放置的,可以通过 @stacked="True"<graph>

Line

二维折线图

Pie

二维派

图形视图包含<field>带有强制@type属性的值:

row (默认)

该字段应默认汇总

measure

该字段应汇总而不是分组

修改models\models.py,在“Session”对象中添加一个“图形”视图,该视图以条形图的形式显示每个课程的参加人数。

  1. 将与会者人数attendees_count添加为存储的计算字段
  2. 然后添加相关视图
end_date = fields.Date(string="End Date", store=True,        compute='_get_end_date', inverse='_set_end_date')#添加与会人数计算属性    attendees_count = fields.Integer(        string="Attendees count", compute='_get_attendees_count', store=True)    @api.depends('seats', 'attendee_ids')    def _taken_seats(self):        for r in self:            # so add one day to get 5 days instead            r.duration = (r.end_date - r.start_date).days + 1#添加计算函数    @api.depends('attendee_ids')    def _get_attendees_count(self):        for r in self:            r.attendees_count = len(r.attendee_ids)    @api.constrains('instructor_id', 'attendee_ids')    def _check_instructor_not_in_attendees(self):        for r in self:

在openacademy.xml添加图表视图

                 
openacademy.session.graph
openacademy.session
Sessions
openacademy.session
tree,form,calendar,graph

 

运行效果

5、看板

用于组织任务,生产过程等……其根元素是 <kanban>

看板视图显示一组可能按列分组的卡片。每张卡代表一条记录,每列代表一个聚合字段的值。

例如,项目任务可以按阶段(每个列是一个阶段)或负责任的方式(每个列是一个用户)进行组织,等等。

添加一个看板视图,该视图显示按课程分组的会话(因此,列就是课程)。

  1. 将一个整数color字段添加到会话模型
  2. 添加看板视图并更新操作

修改models\models.py,为session对象增加color属性

duration = fields.Float(digits=(6, 2), help="Duration in days")    seats = fields.Integer(string="Number of seats")    active = fields.Boolean(default=True)    # 增加    color = fields.Integer()    instructor_id = fields.Many2one('res.partner', string="Instructor",        domain=['|', ('instructor', '=', True),

 

修改views\openacademy.xml增加kanban视图

                
openacademy.session.kanban
openacademy.session
Session name:
Start date:
duration:
Sessions
openacademy.session
tree,form,calendar,graph,kanban

运行效果

参考文档

https://www.odoo.com/documentation/13.0/howtos/backend.html#build-an-odoo-module

 

转载地址:http://zqpe.baihongyu.com/

你可能感兴趣的文章
MySQL-Explain的详解
查看>>
mysql-group_concat
查看>>
MySQL-redo日志
查看>>
MySQL-【1】配置
查看>>
MySQL-【4】基本操作
查看>>
Mysql-丢失更新
查看>>
Mysql-事务阻塞
查看>>
Mysql-存储引擎
查看>>
mysql-开启慢查询&所有操作记录日志
查看>>
MySQL-数据目录
查看>>
MySQL-数据页的结构
查看>>
MySQL-架构篇
查看>>
MySQL-索引的分类(聚簇索引、二级索引、联合索引)
查看>>
Mysql-触发器及创建触发器失败原因
查看>>
MySQL-连接
查看>>
mysql-递归查询(二)
查看>>
MySQL5.1安装
查看>>
mysql5.5和5.6版本间的坑
查看>>
mysql5.5最简安装教程
查看>>
mysql5.6 TIME,DATETIME,TIMESTAMP
查看>>