【问题标题】:Get field value from input to use it in Odoo从输入中获取字段值以在 Odoo 中使用它
【发布时间】:2021-05-25 15:06:12
【问题描述】:

在网站视图上,

如何获取“nbr1”字段的值并自动复制到“直接复制nbr1”字段中?

有人有例子吗?

template.xml

  <template id="biography">
        <t t-call="website.layout">
            <t t-set="title">bio</t>
            <div class="oe_structure">
                <div class="container">
                    <h3 t-field="person.name"/>
                    <p>Last modified: <i t-field="person.write_date"/></p>                  
                    <p>nbr1 : <input type="number" name="nbr1"/></p>
                    <p>Direct copy of nbr1 : <h3 t-field="person.result"/></p>
                </div>              
            </div>
            <div class="oe_structure"/>
        </t>
    </template>

model.py

name = fields.Char()
nbr1 = fields.Integer()
result = fields.Integer(compute="_compute_total")    

@api.onchange('nbr1')
def _compute_total(self):
    for record in self:
        record.result = self.nbr1

【问题讨论】:

    标签: odoo field


    【解决方案1】:

    在 onchange 函数中给出 nbr1 而不是传记。

    name = fields.Char()
    nbr1 = fields.Integer()
    result = fields.Integer()    
    
    @api.onchange('nbr1')
    def _compute_total(self):
        for record in self:
            if record.nbr1:
                record.result = record.nbr1    
    

    【讨论】:

    • 你好@saks,我试过了,但它不起作用
    • 试试我编辑的代码。检查它是否有效。 @Adri
    • 谢谢@Saks_here 的回答,我尝试了你的代码,它在数据库中创建了结果字段,但是在直接在数据库中更改“nbr1”的值之后,它就像它没有进入“_compute_total”函数。所以我改变了这一行:“result = fields.Integer(compute="_compute_total")”进入函数,刷新并保持相同的数据库后,直接复制了值。但是当我在 Web 字段中更改 nbr1 的值时,什么也没发生。我虽然 api.onchange 应该在不刷新的情况下即时更改值,但它没有这样做。
    • @adri 实际上当我们使用 onchange 时,不需要使用计算在 xml 中调用该函数。如果您想直接复制值而不刷新页面,那么您可以尝试related=field_name
    • @adri 在 py 中试试这个代码:result = fields.Integer (related ='nbr1')
    猜你喜欢
    • 1970-01-01
    • 2021-06-14
    • 2022-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-09
    • 2017-12-06
    相关资源
    最近更新 更多