odoo新手创建模块(三)--添加按钮功能

一.添加按钮

虽搭有是否被收养,以及最后收养时间,但只能在编辑模式中,勾选或不勾选是否被收养,容易被客户所遗忘此功能,操作上也略微不流畅.至此添加按钮,来优化此功能:

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时),会隐藏收养,显示归还按钮:
    按钮1
  • 当我们点击未收养的记录时(borrowed字段为False时),会隐藏归还,显示收养按钮:
    按钮2

二.添加按钮动作/后台方法

在没有写入后台方法时,点击按钮会报错,因为还未创建后台方法,们在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文件后,需升级模块

在更新后,按钮便可正常运行,在点击归还按钮后:

  1. 归还按钮隐藏,收养按钮显示
  2. 是否被收养单选框,由选中改变为未选中
  3. 最后归还时间更新

归还
点击收养按钮后:

  1. 收养按钮隐藏,归还按钮显示
  2. 是否被收养单选框,由未选中改变为选中
  3. 最后被收养时间更新
    收养

逻辑:

  • 猫舍的猫猫被人领养/收养,便点击按钮,记录最后被收养时间
  • 猫猫的主人因生活/工作等原因,无暇照顾猫猫,则归还猫舍,点击归还,记录最后归还时间

详情请参考(砖厂管理员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>

升级后,达到如此效果:
已收养时,隐藏最后归还时间,显示最后被收养时间
已被收养
未收养时,隐藏最后被收养时间,显示最后归还时间:
未收养

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值