我是从零开始在Odoo中创建模块的新手,我正在读这本书:
Odoo 10开发要点-Daniel Reis
from odoo import models, fields, api
class TodoTask(models.Model):
_name = 'todo.task'
_description = 'to-do task'
name = fields.Char('Description', required=True)
is_done = fields.Boolean('Done?')
active = fields.Boolean('Active?', default=True)
@api.multi
def do_toggle_button(self):
for task in self:
task.is_done = not task.is_done
return True
接下来是视图的xml文件:
<?xml version="1.0" encoding="UTF-8"?>
<odoo>
<record id="view_form_todo_task" model="ir.ui.view">
<field name="name">To-Do Task Form</field>
<field name="model">todo.task</field>
<field name="arch" type="xml">
<form string="To-Do task">
<header>
<button name="do_toggle_button" type="object" string="Toggle Done" class="oe_highlight"/>
<button name="do_clear_done" type="object" string="Clear All Done"/>
</header>
<sheet>
<group name="group_top">
<group name="group_left">
<field name="name"/>
</group>
<group name="group_right">
<field name="is_done"/>
<field name="active" readonly="1"/>
</group>
</group>
</sheet>
</form>
</field>
</record>
<record id="view_tree_todo_task" model="ir.ui.view">
<field name="name">To-Do Task Tree</field>
<field name="model">todo.task</field>
<field name="arch" type="xml">
<tree string="To-Do task shown">
<field name="name"/>
<field name="is_done"/>
</tree>
</field>
</record>
<record id="view_search_todo_task" model="ir.ui.view">
<field name="name">To-Do Task Search</field>
<field name="model">todo.task</field>
<field name="arch" type="xml">
<search>
<field name="name"/>
<filter string="Not Done" domain="[('is_done','=',False)]"/>
<filter string="Done" domain="[('is_done','!=',False)]"/>
</search>
</field>
</record>
</odoo>
对于do\u toggle\u done方法,书中说:
代码循环遍历所有待办任务记录,并为每个记录修改字段,反转其值
”这是因为对于api.multi,如果我理解正确的话,对象“self”表示所有记录集,但是当我调用函数(使用按钮)时,它只修改我正在修改的记录的标志,其他的保持不变。有什么不对劲吗?我误解了吗?