我继承自purchase.order.line。我添加了一堆相关字段。它们都与product.product中的字段相关,通过order_line中的product_id。
我想要实现的是,当用户在采购订单行表单中选择或更改产品时,相关字段应使用所选产品的值进行刷新/更新/填充。
我为此编写了onchange方法,但我不确定如何从继承的视图中调用它? product_id字段已经存在于(父)order_line视图中,并且已经定义了onchange。如何让系统也使用我的onchange?
我不想打扰buy.order.line中已经存在的onchange_productid方法。因此,无论是在我的onchange之前还是之后,它都应继续其标准功能。
由于
编辑:最新版本(当任何相关的many2one或选择字段都有值时会收到错误。)
class purchase_order_line_custom(osv.osv):
_name = 'purchase.order.line'
_inherit = 'purchase.order.line'
def onchange_product_id(self, cr, uid, ids, pricelist_id, product_id, qty, uom_id, partner_id, date_order=False, fiscal_position_id=False, date_planned=False, name=False, price_unit=False, context=None):
values = super(purchase_order_line_custom, self).onchange_product_id(cr, uid, ids, pricelist_id, product_id, qty, uom_id, partner_id, date_order, fiscal_position_id, date_planned,name, price_unit, context=context)
if product_id:
product = self.pool.get('product.product').browse(cr, uid, product_id, context=context)
values['value'].update({
'qualified_name':product.qualified_name,
'product_type' : product.product_type or None,
'product_subtype' : product.product_subtype,
'count_id':product.count_id or None
})
return values
_columns={
'product_type': fields.related('product_id','product_type',type='selection', string='Product Type', selection=[('X','X'),('Y','Y'),('Z','Z')]),
'product_subtype': fields.related('product_id','product_subtype',type='char', size=64, string='Sub-Type'),
'qualified_name': fields.related('product_id','qualified_name',type='char', size=64, string='Qualified Name'),
'count_id': fields.related('product_id','count_id',type='many2one',relation='product.mycount',string='Count')
}
purchase_order_line_custom()
答案 0 :(得分:2)
你需要覆盖onchange函数(你可以使用super())来获得字段'product_id'并更新结果。 例如
def onchange_product(self,cr,uid,ids,product_id,context=None):
values = super(<your_class_name>,self).onchange_product(cr, uid,ids,product_id,context=context)
# values will be a dictionary containing 'value' as a key.
# You need to add all the newly added related fields and other fields to the values['value'].
# if 'aaa' is the newly added field, then values['value'].update({'aaa':<value for aaa>})
# then return values
return values
修改你改变以下
def onchange_product_id(self, cr, uid, ids, pricelist_id, product_id, qty, uom_id,
partner_id, date_order=False, fiscal_position_id=False, date_planned=False,
name=False, price_unit=False, context=None):
values = super(purchase_order_line_custom, self).onchange_product_id(cr, uid, ids, pricelist_id, product_id, qty, uom_id, partner_id, date_order, fiscal_position_id, date_planned,name, price_unit, context=context)
if product_id:
product = self.pool.get('product.product').browse(cr, uid, product_id, context=context)
values['value'].update({
'product_type' : product.product_type,
'product_subtype' : product.product_subtype,
'qualified_name' : product.qualified_name,
'count_id' : product.count_id
})
return values
答案 1 :(得分:1)
首先让我们了解为什么使用fields.related
?
fields.related
字段,指向当前记录的另一个字段内的某些数据。
这意味着,当您选择其他字段的值时,相关的字段将自动填充。
示例:
_columns = {
'product_id': fields.many2one('product.product', 'Product'),
'product_name': fields.related('product_id', 'name', type='char', string='Product Name'),
}
在此示例中,当您选择product_name
时,系统会自动填充product_id
。您不必为此编写onchange
。
您可以找到fields.related
的许多示例。