如何在编辑表单中显示/刷新相关字段

时间:2012-07-22 15:22:47

标签: openerp

我有一个对象shipment,其字段product的类型与many2one相关,引用了包含一个产品(many2one)的many2one对象contract。当我创建货件时,在我保存货件之前,产品不会显示。此外,在编辑时,产品不会随合同而变化。

我尝试创建onchange事件,该事件返回新产品值,但它不起作用。

当关系改变时,他们的方法是刷新相关字段吗?

  • 穆罕默德

2 个答案:

答案 0 :(得分:2)

阿里,

如果相关字段是正确的,则只有在保存记录时才会显示值。因为您保存记录,ORM将链接相关的字段值,网页将回读它并显示回来。

但是,可以立即向您显示值。当您更改字段本身时,可以使用能够显示任意字段值的on_change

问候。

答案 1 :(得分:1)

我认为sales.orderstock.picking标准对象非常接近您的需求。最好是扩展标准对象,而不是从头开始创建新对象。

关于您的问题,您需要on_change行为,因此您应该尝试修复无效的方法。 在6.1中你有一个很好的例子。请参阅crm_base中的crm/crm.py对象。

您可以在“CRM主导”表单中看到它的实际效果):选择合作伙伴时,会自动填写地址和电子邮件。您还需要查看crm_case_form_view_oppor中的视图ID crm\crm_lead_view.xml,以检查该方法的使用方式。

型号代码为:

def onchange_partner_address_id(self, cr, uid, ids, add, email=False):
    """This function returns value of partner email based on Partner Address
    :param ids: List of case IDs
    :param add: Id of Partner's address
    :param email: Partner's email ID
    """
    data = {'value': {'email_from': False, 'phone':False}}
    if add:
        address = self.pool.get('res.partner.address').browse(cr, uid, add)
        data['value'] = {'email_from': address and address.email or False ,
                         'phone':  address and address.phone or False}
    if 'phone' not in self._columns:
        del data['value']['phone']
    return data

def onchange_partner_id(self, cr, uid, ids, part, email=False):
    """This function returns value of partner address based on partner
    :param ids: List of case IDs
    :param part: Partner's id
    :param email: Partner's email ID
    """
    data={}
    if  part:
        addr = self.pool.get('res.partner').address_get(cr, uid, [part], ['contact'])
        data = {'partner_address_id': addr['contact']}
        data.update(self.onchange_partner_address_id(cr, uid, ids, addr['contact'])['value'])
    return {'value': data}

视图侧代码是:

<field name="partner_id" select="1" colspan="2" 
  on_change="onchange_partner_id(partner_id, email_from)" string="Customer" />
<field name="partner_address_id" string="Contact" colspan="1"
  on_change="onchange_partner_address_id(partner_address_id, email_from)" />