2

我继承自 purchase.order.line。我添加了一堆相关字段。它们都通过 order_line 中的 product_id 与 product.product 中的字段相关。

我想要实现的是,当用户在采购订单行表单中选择或更改产品时,相关字段应该被刷新/更新/填充所选产品的值。

我已经为此编写了 onchange 方法,但我不确定如何从继承的视图中调用它?product_id 字段已经在(父) order_line 视图中,并且已经定义了 onchange。如何让系统也使用我的 onchange?

我不想打扰 purchase.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() 
4

2 回答 2

2

您需要覆盖字段“product_id”的 onchange 函数(您可以使用 super() )并更新结果。例如

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

修改你onchange到以下

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 
于 2013-03-06T10:05:18.657 回答
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

于 2013-03-06T10:12:42.660 回答