【问题标题】:Odoo v10 @onchange(stage_id) doesn't work with <field name="stage_id" widget="statusbar" clickable="True"/>Odoo v10 @onchange(stage_id) 不适用于 <field name="stage_id" widget="statusbar" clickable="True"/>
【发布时间】:2017-07-17 12:35:29
【问题描述】:

Odoo v10 @onchange(stage_id) 不适用于 stage_id 小部件字段。当我在表单正文中添加字段简单字段时,它可以工作,但不能使用原始字段:

<field name="stage_id" widget="statusbar" clickable="True"/>

class TaskExtension(models.Model):
    _name = 'project.task'
    _inherit = ['project.task']

    @api.model('stage_id', 'date_deadline')
    def _onchange_responsible(self):
        self.user_id = self.stage_id.responsible


    user_id = fields.Many2one('res.users',string = 'Assigned To',computed = _onchange_responsible,store=True)

【问题讨论】:

    标签: python openerp project onchange


    【解决方案1】:

    on change函数应该这样写

    @api.onchange('stage_id')  # triggered fields
    def on_change_stage_id(self):
        # your logic here like:
        if self.stage_id:
           self.user_id = self.stage_id.responsible
    

    【讨论】:

    • 还是不行。这是唯一一个不起作用的字段。它适用于 onchange 中的每个领域,但不是我需要的……
    • 但是是字段值变化还是需要点击时触发该功能
    • 如果状态栏是可点击的,则不会调用 onchange。它会调用 write 方法。
    【解决方案2】:

    如果状态栏是可点击的,则不会调用 onchange 方法。它会直接调用write方法。

    所以在这种情况下你需要处理 write 方法。

    @api.multi
    def write(self, vals):
        res = super(class_name, self).write(vals)
        ### your logic
        return res
    

    如果你想调用 onchange 函数,那么你可以使用 @api.onchange 装饰器。

    @api.model 将在您想要调用没有任何对象的任何方法时使用(使用模型引用/空白记录集)。

    @api.onchange 将用于在一个或多个字段的值更新时调用函数。

    @api.onchange('field1', 'field2')
    def function_name(self):
        # your logic here like:
    

    最后你的方法应该是这样的,

    @api.onchange('stage_id')
    def on_change_stage_id(self):
        self.user_id = self.stage_id.responsible
    

    在 odoo onchange 方法字段中我必须可用(可见/不可见) 表单视图,否则将不起作用。

    【讨论】:

    • 有什么问题吗?
    • self.user_id 不会改变。我之前尝试过打印语句,没有任何内容打印到命令行。似乎根本没有调用该函数
    • 可见。来自源的原始形式有它。
    【解决方案3】:

    试试这个:

    <field name="state" widget="statusbar" options="{'fold_field': 'fold'}" clickable="True"/>
    

    【讨论】:

      猜你喜欢
      • 2022-12-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-14
      • 1970-01-01
      • 1970-01-01
      • 2012-09-14
      • 2020-05-05
      相关资源
      最近更新 更多