一.添加按钮
虽搭有是否被收养,以及最后收养时间,但只能在编辑模式中,勾选或不勾选是否被收养,容易被客户所遗忘此功能,操作上也略微不流畅.至此添加按钮,来优化此功能:
在views文件夹下,打开My_Cats_HomePage_view.xml文件,对from视图进行改动:
<record id="my_cats_view_form" model="ir.ui.view">
<field name="name">猫猫管理系统</field>
<field name="model">my.cats</field>
<field name="arch" type="xml">
<form>
<header>
<!--
name:后台的方法名(后面会讲到)
type:object(默认写法)
class:btn-primary(默认样式)
icon:用于设置要使用的图标
attrs:根据条件动态设置字段属性
readonly 只读
required 必填
invisible 隐藏
多个条件则:attrs=’{‘invisible’: [(‘is_ill’, ‘=’, True)],
‘required’: [(‘is_ill’, ‘=’, False)]}’
-->
<!--
在此代码中表示:
当borrowed(是否被收养)字段值为True,则隐藏掉收养按钮
当borrowed(是否被收养)字段值为False,则隐藏掉归还按钮
-->
<button name="adopt_action" type="object" string="收养" class="btn-primary"
icon="fa-toggle-on" attrs="{'invisible': [('borrowed', '=', True)]}"/>
<button name="return_action" type="object" string="归还" class="btn-primary"
icon="fa-toggle-off" attrs="{'invisible': [('borrowed', '=', False)]}"/>
</header>
<sheet>
<group>
<group>
<field name="name"/>
<field name="cat_type"/>
<field name="price"/>
<field name="borrowed"/>
</group>
<!--..........后面代码不作改变,故省略-->
attrs分为:
- readonly 只读
- required 必填
- invisible 隐藏
当条件为多个时,用字典划分
至此,达到效果为:
- 当我们点击已收养的记录时(borrowed字段为True时),会隐藏收养,显示归还按钮:
- 当我们点击未收养的记录时(borrowed字段为False时),会隐藏归还,显示收养按钮:
二.添加按钮动作/后台方法
在没有写入后台方法时,点击按钮会报错,因为还未创建后台方法,们在models文件夹下,找到My_Cats_HomePage.py文件,并添在末尾处添加如下代码:
borrowed = fields.Boolean(string="是否被收养", default=False)
date_last_borrowed = fields.Datetime("最后被收养时间", index=True, readonly=True)
date_last_return = fields.Datetime("最后归还时间", index=True, readonly=True)
#上面的代码是我们之前添加过的字段,不用理会,
#只需要知道我们的方法大概添加的位置
#下面才是这章的内容
#--------------------------------------------
#第一个方法:
#在创建按钮时,name所对应的就是方法名(adopt_action)
#此方法在执行后,会将当前对象的 borrowed 的值赋值为 True
#并将date_last_borrowed 赋值为 当前时间
#逻辑为,点击收养按钮(adopt_action),是否被收养(borrowed )为已收养(True)
#最后被收养时间(date_last_borrowed ),记录当前的时间
def adopt_action(self):
self.borrowed = True
self.date_last_borrowed = fields.Datetime.now()
#逻辑为,点击归还按钮(return_action),是否被收养(borrowed )为未收养(False)
#最后归还时间(date_last_return),记录当前的时间
def return_action(self):
self.borrowed = False
self.date_last_return = fields.Datetime.now()
修改py文件后,需重新运行+升级模块
修改xml文件后,需升级模块
在更新后,按钮便可正常运行,在点击归还按钮后:
- 归还按钮隐藏,收养按钮显示
- 是否被收养单选框,由选中改变为未选中
- 最后归还时间更新
在点击收养按钮后:
- 收养按钮隐藏,归还按钮显示
- 是否被收养单选框,由未选中改变为选中
- 最后被收养时间更新
逻辑:
- 猫舍的猫猫被人领养/收养,便点击按钮,记录最后被收养时间
- 猫猫的主人因生活/工作等原因,无暇照顾猫猫,则归还猫舍,点击归还,记录最后归还时间
详情请参考(砖厂管理员的odoo 在form视图中创建按钮并调用后台方法)或(Leo-Bian的第三节 ODOO开发教程之基本字段属性)
三.隐藏:最后被收养时间/最后归还时间
逻辑:
当猫猫已被收养,则显示最后被收养时间,而将最后归还时间隐藏掉,
当猫猫未被收养,则显示最后归还时间,而将最后被收养时间隐藏掉
多余的展示毫无作用,所以要适当的隐藏/展示
在views文件夹下,打开My_Cats_HomePage_view.xml文件,对from视图进行改动:
<group>
<field name="code"/>
<field name="age"/>
<field name="doing_date"/>
<!--上面数值为之前添加过的,并不用理会
只需要对应上下文,知道在哪里修改即可
下面的代码才是我们修改的部分
-->
<!--我们增加了attrs:根据条件动态设置字段属性
当是否被收养(borrowed)为未被收养(False)时,隐藏最后被收养时间(date_last_borrowed)
当是否被收养(borrowed)为已被收养(True)时,隐藏最后归还时间(date_last_return)
-->
<field name="date_last_borrowed" attrs="{'invisible': [('borrowed', '=', False)]}"/>
<field name="date_last_return" attrs="{'invisible': [('borrowed', '=', True)]}"/>
</group>
升级后,达到如此效果:
已收养时,隐藏最后归还时间,显示最后被收养时间
未收养时,隐藏最后被收养时间,显示最后归还时间: