OpenERP - 不同视图页面中字段的onchange方法?

Posted

技术标签:

【中文标题】OpenERP - 不同视图页面中字段的onchange方法?【英文标题】:OpenERP - onchange method for fields in different page of view? 【发布时间】:2014-03-06 07:39:52 【问题描述】:

似乎 onchange 方法仅适用于当前可见字段。如果我用它来填充视图其他页面中的其他字段,它不会做任何事情。例如,我有很多页面的视图。主要是第一页需要填写所有信息,所以大部分字段填写正确。但是当我在另一个页面中选择partner_id 时,我需要在另一个页面中填写一个字段。例如在这样的视图中:

...
<page string="page1">
  <field name=partner_id on_change="onchange_partner(partner_id)"
  <field name="field1"/>
  <field name="field2"/>

</page>
<page string="page2">
   <field name="field3"/>
</page>
...

field1field2 将被填充。但是如何填写field3还是不可能,因为系统没有使用onchange方法将其保存到数据库中?

我的 onchange 方法如下所示:

def onchange_partner(self, cr, uid, ids, partner_id, context=None):
  res = 
  if partner_id:
    obj = self.pool.get('res.partner').browse(cr, uid, partner_id)
    res['field1'] = obj.field1
    res['field2'] = obj.field2
    res['field3'] = obj.field3 # this value isn't being filled
  return 'value': res

那么我该如何填写field3

【问题讨论】:

检查你的 'field3' 和 obj.field3 的字段类型是否相同? 【参考方案1】:

不是这样的。它肯定会改变价值。您可能无法在 field3 中获得价值,因为您正在获取的记录将没有 field3 的值。并且您的问题的答案是 IT WORKS。试试这个,

def onchange_partner(self, cr, uid, ids, partner_id, context=None):
    res = 
    if partner_id:
        obj = self.pool.get('res.partner').browse(cr, uid, partner_id)
        res['field1'] = obj.field1
        res['field2'] = obj.field2
        res['field3'] = 'Hello' # this field type must be char or if not then give 
        #value accordingly, its just to prove you that values are filled on onchange.
    return 'value': res

希望这会对你有所帮助。

【讨论】:

你是对的。有用。问题出在field3上。创建演示合作伙伴时,该字段上没有域。当我测试它时,那个字段有域,但是那个字段不满足域并且无法选择。但现在它是固定的。谢谢。

以上是关于OpenERP - 不同视图页面中字段的onchange方法?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 OpenERP7 视图中更改 XML 标签?

Odoo(OpenERP)开发实践:数据模型学习

在 OpenERP 中,如何从父级(Many2One 对象)中显示或隐藏基于域的字段

获取 OpenERP 中字段的标签名称

OpenERP建模/视图:相关对象内联

如何使用适用于 OpenOffice / LibreOffice 的 OpenERP 报表设计器插件获取字段列表