代码之家  ›  专栏  ›  技术社区  ›  alukard990

odoo10-Api.multi-decoration不会循环到所有记录

  •  0
  • alukard990  · 技术社区  · 6 年前

    我是从零开始在Odoo中创建模块的新手,我正在读这本书: Odoo 10开发要点-Daniel Reis

    # coding: utf8
    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”表示所有记录集,但是当我调用函数(使用按钮)时,它只修改我正在修改的记录的标志,其他的保持不变。有什么不对劲吗?我误解了吗?

    1 回复  |  直到 6 年前
        1
  •  0
  •   Om Prakash Maurya    6 年前

    由于在窗体视图中添加了多功能,因此在self上只会得到一条记录。Self表示数据集,但在窗体视图中,此数据集只有一条记录。如果要切换所有任务完成状态,可以使用调用 @api.型号 ir.server.action操作 喜欢

      <record id="ir_actions_server_timesheet_sheet" model="ir.actions.server">
            <field name="sequence" eval="5"/>
            <field name="state">code</field>
            <field name="type">ir.actions.server</field>
            <field name="model_id" ref="model_hr_timesheet_current_open"/>
            <field name="code">action = model.open_timesheet()</field>
            <field name="condition">True</field>
            <field name="name">My Timesheet</field>
        </record>