Python 存储值(onchange)-新api[Odoo/Openerp]
我在“sale.order.line”对象中添加了两个字段。假设“field1”和“field2”,它们是只读字段。无论何时更改订单行中的产品,都会显示这两个字段的值 当我选择一个产品时,它会显示两个字段的值,但当保存它时,该值将返回0,而不是存储 这是我的密码:Python 存储值(onchange)-新api[Odoo/Openerp],python,openerp,odoo-8,Python,Openerp,Odoo 8,我在“sale.order.line”对象中添加了两个字段。假设“field1”和“field2”,它们是只读字段。无论何时更改订单行中的产品,都会显示这两个字段的值 当我选择一个产品时,它会显示两个字段的值,但当保存它时,该值将返回0,而不是存储 这是我的密码: class sale_order_line(models.Model): _inherit = 'sale.order.line' field1 = fields.Float('One') field2 =
class sale_order_line(models.Model):
_inherit = 'sale.order.line'
field1 = fields.Float('One')
field2 = fields.Float('Two')
@api.multi
def product_id_change(self, pricelist, product, qty=0,
uom=False, qty_uos=0, uos=False, name='', partner_id=False,
lang=False, update_tax=True, date_order=False, packaging=False, fiscal_position=False, flag=False):
res = super(sale_order_line, self).product_id_change(pricelist, product, qty,
uom, qty_uos, uos, name, partner_id,
lang, update_tax, date_order, packaging, fiscal_position, flag)
if product:
one = self.search([('product_id', '=', product), ('partner_id', '=', partner_id)])
two = self.search([('product_id', '=', product), ('partner_id', '!=', partner_id)])
if customer:
field1 = one[-1]
res['value']['field1'] = field1
if other:
field2 = two[-1].
res['value']['field2'] = field2
return res
这是因为
readonly
模式仅用于显示。在这种情况下,字段中的值不会发送到服务器端
您可以覆盖sale.order.line
的方法create
。应该是这样的:
class sale_order_line(models.Model):
_inherit = 'sale.order.line'
@api.model
def create(self, vals):
# just example
vals[u'field1'] = 2.03
vals[u'field2'] = 3.05
return super(sale_order_line, self).create(vals)
希望这对您有所帮助。这是因为
只读模式仅适用于显示。在这种情况下,字段中的值不会发送到服务器端
您可以覆盖sale.order.line
的方法create
。应该是这样的:
class sale_order_line(models.Model):
_inherit = 'sale.order.line'
@api.model
def create(self, vals):
# just example
vals[u'field1'] = 2.03
vals[u'field2'] = 3.05
return super(sale_order_line, self).create(vals)
希望这对您有所帮助。在Odoo框架中,我们现在允许设置只读字段值,并且在create和write方法中,只读字段将不会进入VAL
所以,如果您在onchange方法中设置这些只读字段值,那么它也不会保留其值,因为它本质上是只读的,不会给您任何错误
目的:定义只读属性的目的是在UI上记录的所有状态下表现相同,用户不能更改其值,主要是为了显示目的而定义。这就是为什么在onchange方法中无法访问只读字段进行编辑
解决方案:
您需要按照以下方式重写CREATE或WRITE方法
@api.model
def create(self, vals):
######
# WRITE YOUR LOGIC HERE AND BRING THOSE VALUE INTO VARIABLE AND THEN UPDATE IT IN VALS
VARIABLE_1 = SEARCH YOUR DATA
VARIABLE_2 = SEARCH YOUR DATA
vals.update({field1' : VARIABLE_1, 'field_2' : VARIABLE_2})
return super(sale_order_line, self).create(vals)
更新VAL(记录字典),方法是在调用超级方法之前将这些只读字段设置到字典中,或者在调用超级方法之后更新这些字段
您的问题有另一种解决方案。在Odoo应用程序中,该系统提供的一个模块将在数据库中存储只读值。
在Odoo框架中,我们现在允许设置只读字段值,并且在创建方法和写入方法中,只读字段将不会进入VAL
所以,如果您在onchange方法中设置这些只读字段值,那么它也不会保留其值,因为它本质上是只读的,不会给您任何错误
目的:定义只读属性的目的是在UI上记录的所有状态下表现相同,用户不能更改其值,主要是为了显示目的而定义。这就是为什么在onchange方法中无法访问只读字段进行编辑
解决方案:
您需要按照以下方式重写CREATE或WRITE方法
@api.model
def create(self, vals):
######
# WRITE YOUR LOGIC HERE AND BRING THOSE VALUE INTO VARIABLE AND THEN UPDATE IT IN VALS
VARIABLE_1 = SEARCH YOUR DATA
VARIABLE_2 = SEARCH YOUR DATA
vals.update({field1' : VARIABLE_1, 'field_2' : VARIABLE_2})
return super(sale_order_line, self).create(vals)
更新VAL(记录字典),方法是在调用超级方法之前将这些只读字段设置到字典中,或者在调用超级方法之后更新这些字段
您的问题有另一种解决方案。在Odoo应用程序中,该系统提供的一个模块将在数据库中存储只读值。
我如何传递来自方法product\u id\u change的值?@Anonymous101如果self.product\u id.id:#在这里做某事
我如何传递来自方法product\u id\u change的值?@Anonymous101如果self.product\u id.id:#在这里做某事