一.计算字段(compute)
字段中可使用根据函数自动计算所得的类型,计算字段的声明方式与常规字段是一样的,只是使用了compute参数,参数被赋值为一个函数的名称,如果看不懂,就直接看源码吧:
我们的猫猫管理系统目前在新建数据时,会出现最后被收养时间和最后归还时间无值的情况.
只有当我们保存后,再进行编辑时,才会触发修改事件,如果我们想在新建的时候,就默认归还/收养时间为当前时间,就该使用compute了
找到My_Cats_HomePage.py文件,增加计算字段:
#compute:计算字段,参数是定义的方法
#store=True:计算字段是默认不将数据保存在数据库中的,要想保存,就要使用此字段
date_last_borrowed = fields.Datetime("最后被收养时间", index=True, readonly=True,compute="_compute_date",store=True)
date_last_return = fields.Datetime("最后归还时间", index=True, readonly=True,compute="_compute_date",store=True)
@api.depends('borrowed')
#计算字段需要修饰器@api.depends
#参数为字段,即当该字段值发生改变时,调用此方法
#与上面字段添加的compute参数一致
def _compute_date(self):
"""
在创建时,自动将最后被收养时间/最后归还时间进行处理
"""
if self.borrowed :
#如果创建时勾选已收养,则最后被收养时间为当前时间
self.date_last_borrowed = fields.Datetime.now()
else:
#如果创建时未勾选已收养,则最后归还时间为当前时间
self.date_last_return = fields.Datetime.now()
当我们新建时,系统会为我们自动填好最后归还时间:
当我们改变是否被收养单选框时,最后被收养时间也会随之改变:
二.隐藏tree视图值
在点击tree视图时,我们发现最后被收养时间与最后归还时间同时存在,其实我们只需要显示一个就好,在是否被收养字段为true时,只显示最后被收养时间,当是否被收养字段为false时,只显示最后归还时间.
这里有两种办法:
一.数据库限制:
找到My_Cats_HomePage.py文件,修改计算方法(_compute_date):
@api.depends('borrowed')
def _compute_date(self):
"""
在创建时,便自动将最后被收养时间/最后归还时间进行处理
"""
if self.borrowed :
self.date_last_borrowed = fields.Datetime.now()
self.date_last_return=None#当被收养时将最后归还时间值为空
else:
self.date_last_return = fields.Datetime.now()
self.date_last_borrowed = None#当归还时将最后被收养时间
#注:在修改此方法后,原有数据并不会收到影响
#只有调用了此方法,才会生效
这样,在我们重新创建数据或调用_compute_date方法时,相应的字段值便会自动值空.
二.前端页面限制
我们既需要保留最后被收养时间与最后归还时间两个字段的值,又不希望tree视图两个值都有数据显示,就只能修改xml了.
在views文件夹下,打开My_Cats_HomePage_view.xml文件,修改tree视图:
<tree>
<field name="code"/>
<field name="name"/>
<field name="age"/>
<field name="cat_type"/>
<field name="price"/>
<field name="borrowed"/>
<!--添加attrs属性,当未被收养时隐藏最后被收养时间-->
<field name="date_last_borrowed" attrs="{'invisible':[('borrowed','=',False)]}"/>
<!--添加attrs属性,当已被收养时隐藏最后归还时间-->
<field name="date_last_return" attrs="{'invisible':[('borrowed','=',True)]}"/>
<field name="doing_date"/>
<field name="description"/>
</tree>
attrs基本属性:
- readonly只读
- required必填
- invisible隐藏
attrs根据条件动态设置字段属性,attrs=’{‘invisible’: [(‘is_ill’, ‘=’, True)], ‘required’: [(‘is_ill’, ‘=’, False)]}’
详情请移步Leo-Bian老师的整理资料< ODOO开发教程之基本字段属性>
与之前的数据库限制效果一致,不同的是,数据库所存储的值并不会值空,在pg库里,用sql语句查询时,数据依旧存在,他只是在前端页面被隐藏了而已: