【问题标题】:Onchange field not working OpenERPOnchange 字段不工作 OpenERP
【发布时间】:2014-07-25 02:18:22
【问题描述】:

我正在尝试在 sale.order 的树视图中显示一个名为 phoneres.partner 字段。

但它没有显示任何内容,只是没有数据的字段名称。这是我在sale.order上的代码

phone : fields.char('Telefono del Cliente'),

该字段的 Onchange 函数:

def onchange_phone(self, cr, uid, ids, phone, context=None):
res = {}
    if phone:
        obj = self.pool.get('res.partner')
        browse(cr, uid, phone)
        res['phone'] = obj.phone
    return {'value' : res}

res.partner 上,该字段也称为phone,这显然是客户的电话,我需要在sale.order 树视图上显示它,这是我的sale_view.xml 上的代码:

<field name="phone" on_change="onchange_phone(phone)"/>

有什么想法吗?

提前致谢。

【问题讨论】:

    标签: python xml treeview openerp odoo


    【解决方案1】:

    作为建议,如果您想要合作伙伴的电话号码,则不应创建电话字段的 on_change。您可以通过两种方式获取电话号码。

    第一种方法和最好的方法,在 sale.order 中,onchange_partner_id() 方法是他们的,您需要覆盖该方法并使用合作伙伴的电话号码更新 vals。

    第二条路很长,你可以覆盖create()方法和write()sales.order方法。

    create() 方法技巧:

    • 在 create() 方法中,您可以从上下文中获取合作伙伴 ID。例如vals.get('partner_id')

    write() 方法技巧:

    • 在 write() 方法中,您有已创建记录的 ID,因此您只需浏览该记录并写入合作伙伴的电话号码。

    【讨论】:

      【解决方案2】:

      按照 Odedra 的建议,您应该这样做(取自 sale.py 文件):

      def onchange_partner_id(self, cr, uid, ids, part, context=None):
          if not part:
              return {'value': {'partner_invoice_id': False, 'partner_shipping_id': False,  'payment_term': False, 'fiscal_position': False}}
      
          part = self.pool.get('res.partner').browse(cr, uid, part, context=context)
          addr = self.pool.get('res.partner').address_get(cr, uid, [part.id], ['delivery', 'invoice', 'contact'])
          pricelist = part.property_product_pricelist and part.property_product_pricelist.id or False
          payment_term = part.property_payment_term and part.property_payment_term.id or False
          fiscal_position = part.property_account_position and part.property_account_position.id or False
          dedicated_salesman = part.user_id and part.user_id.id or uid
          phone = part.phone or False
          val = {
              'partner_invoice_id': addr['invoice'],
              'partner_shipping_id': addr['delivery'],
              'payment_term': payment_term,
              'fiscal_position': fiscal_position,
              'user_id': dedicated_salesman,
              'phone': phone,
          }
          if pricelist:
              val['pricelist_id'] = pricelist
          return {'value': val}
      

      请注意,您不应在基本模块上执行此操作,而应创建自己的模块并将其继承到 sale.order 模型。更重要的是,onchange 不适用于树视图(如您建议的那样),但您可以轻松地将其显示在树上 - 您必须首先使用提供的 onchange 将其放在表单上,​​然后修改树视图以显示电话号码。

      【讨论】:

      • 根据您的说明,您已指定继承。所以在 onchange 函数中也请指定调用 super(),这样我们就不会更改 onchange_partner_id 函数
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-08
      相关资源
      最近更新 更多