我有一个对象,其类型为与 many2one 相关shipment
的字段,该对象引用具有一个产品(many2one)的 many2one 对象。创建货件时,在我保存货件之前不会显示产品。此外,在编辑时,产品不会随合同而改变。product
contract
我尝试创建返回新产品值的 onchange 事件,但它不起作用。
当关系发生变化时,它们是一种刷新相关字段的方法吗?
- 穆罕默德
我有一个对象,其类型为与 many2one 相关shipment
的字段,该对象引用具有一个产品(many2one)的 many2one 对象。创建货件时,在我保存货件之前不会显示产品。此外,在编辑时,产品不会随合同而改变。product
contract
我尝试创建返回新产品值的 onchange 事件,但它不起作用。
当关系发生变化时,它们是一种刷新相关字段的方法吗?
那么阿里,
是的,如果您是正确的相关字段,则仅当您保存记录时才会显示值。因为您保存了记录,ORM 将链接相关的字段值,并且网页将读回它并显示给您。
但是是的,可以立即在您的用户上显示on_change
值,当您更改字段本身时,该用户具有任何字段的值的能力。
问候。
我觉得标准对象非常接近您的需要sales.order
。stock.picking
你最好扩展标准对象而不是从头开始创建新对象。
关于您的问题,您需要on_change
行为,因此您应该尝试修复不起作用的方法。在 6.1 中有一个很好的例子。查看 中的crm_base
对象crm/crm.py
。
您可以在 CRM Lead 表单中看到它的实际效果):选择合作伙伴时,会自动填写地址和电子邮件。您还需要查看 中的视图 ID crm_case_form_view_oppor
,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)" />