【问题标题】:How to update a value from a field without refreshing the page Odoo如何在不刷新页面 Odoo 的情况下更新字段中的值
【发布时间】:2022-06-19 15:54:14
【问题描述】:

我正在模块的设置页面上创建一个新扇区,其中有一个值和一个更新图标,旨在在我单击图标时更新字段值。

但是当我调用函数执行函数时,页面被重新加载,我从来没有得到值,但是值是用记录器打印在终端中的,有人有什么建议吗?

我的 XML 代码:

<button type="object" name="refresh_credits" class="btn-link" icon="fa-refresh"/>
<span class="btn-link">Credits</span>
<field name="new_credits"/>

我在一个类中的 python 代码:

class ResConfigSettings(models.TransientModel):
    _inherit = 'res.config.settings'

    new_credits = fields.Integer()

    def refresh_credits(self):
        data_details_credits = self.env['show.credits'].content_credits_info()
        _logger.info(self.env['show.credits'].content_credits_info()[4])
        self.new_credits = data_details_credits[4]

【问题讨论】:

  • 尝试在函数末尾添加return {'type': 'ir.actions.client', 'tag': 'reload'} free addon
  • 没用,继续刷新页面不更新返回值
  • 我的意思是该值正在终端中更新,但由于页面刷新而从未在前端显示
  • 我一直在做一些测试,当我说 type="object" 时,我认为问题出在按钮中的 XML,但我无法解决它

标签: odoo-14


【解决方案1】:

你必须重写 set_values 和 get_values 方法来更新设置中的值。我们无法直接更新常规设置中的值。

下面是例子:

def set_values(self):
    super(ResConfigSettings, self).set_values()
    self.env['ir.config_parameter'].sudo().set_param('MODULE_NAME.new_credits',
                                                     self.new_credits)
    

@api.model
def get_values(self):
    res = super(ResConfigSettings, self).get_values()
    config = self.env['ir.config_parameter'].sudo()
    config_key = config.get_param('MODULE_NAME.new_credits')
    if config_zoom_key:
        res.update(
            field_name=config_key
        )

    return res

为了更好地理解,请观看此视频:

Add fields general settings

【讨论】:

  • 我认为将值存储在系统参数中不是一个好习惯,但我会这样做,谢谢
猜你喜欢
  • 2011-06-15
  • 2022-11-27
  • 1970-01-01
  • 1970-01-01
  • 2017-03-24
  • 2022-08-19
  • 1970-01-01
  • 2012-04-06
  • 1970-01-01
相关资源
最近更新 更多