为什么api.depends不能在非编辑模式下使用message_follower_ids字段?怎么解决?

时间:2018-03-08 18:50:36

标签: python python-2.7 odoo odoo-10 odoo-view

我想在文档中有关注者并且他们不是Odoo的用户时显示消息。所以我创建了两个计算字段,一个用于消息,另一个用于检查是否应该显示消息。

class SaleOrder(models.Model):
    _inherit = 'sale.order'

    @api.multi
    @api.depends('message_follower_ids')
    def _compute_show_warning_msg(self):
        partner_ids = self.env['res.users'].search([])\
            .mapped('partner_id').mapped('id')
        for record in self:
            msg = _("""\nDocument contains no user followers.\n""")
            for follower in record.message_follower_ids:
                if follower.partner_id.id not in partner_ids:
                    record.show_warning_msg = True
                    record.warning_msg = msg

    show_warning_msg = fields.Boolean(
        compute='_compute_show_warning_msg',
        string='Show warning message',
    )

    warning_msg = fields.Text(
        compute='_compute_show_warning_msg',
        string='Warning message',
    )

但是当表单不处于编辑模式并且我添加或删除关注者时,不会触发计算方法。所以我必须按下"编辑"按钮和"保存"触发方法。

我试图在关注者表的create和unlink方法上执行compute方法,但是表单视图没有刷新

有没有办法触发计算字段并刷新表单以显示消息?

任何变通方法或修复方法?

2 个答案:

答案 0 :(得分:2)

一种可能的解决方案,我将此代码添加到表单视图中:

<field name="message_follower_ids" position="attributes">
    <attribute name="class">oe_edit_only</attribute>
</field>

答案 1 :(得分:1)

添加关注者的按钮如下所示:

<button aria-expanded="false" class="btn btn-sm btn-link dropdown-toggle" data-toggle="dropdown" title="Ningún seguidor">
    <i class="fa fa-user"></i>
    <span class="o_followers_count">0</span>
    <span class="caret"></span>
</button>

所以我刚刚将类oe_edit_only添加到按钮并修复了问题。用户必须处于编辑模式才能看到按钮并添加或删除关注者:

<button aria-expanded="false" class="btn btn-sm btn-link dropdown-toggle oe_edit_only" data-toggle="dropdown" title="Ningún seguidor">
    <i class="fa fa-user"></i>
    <span class="o_followers_count">0</span>
    <span class="caret"></span>
</button>