[英]Simple Multiplication of two fields in OpenErp
我在一個類中有兩個字段,在第三個字段中,我需要之前聲明的兩個字段的相乘結果。
例如:
_columns = {
'Item' : fields.integer('Items'),
'Fecha': fields.date('Fecha del Documento', required=True, select=True),
'Codigo Arancelario' : fields.integer('Codigo Arancelario'),
'Descripcion Arancelaria' : fields.char('Descripcion Arancelaria', size=42, required = True, translate = True),
'Especificaciones Tecnicas' : fields.char('Especificaciones Tecnicas', size=60, required = True, translate = True),
'Cantidad' : fields.float('Cantidad'), 'Unidad de Medida': fields.many2one('product.uom', 'Unidad de Medida'),
'Precio Unitario Declarado' : fields.float('Precio Unitario Declarado'), 'Moneda' : fields.many2one('res.currency', 'Moneda'),
'Valor En Divisas' : Result of the multiplication of 'Precio Unitario Declarado' * 'Cantidad',
'notas' : fields.text('Notas'),
}
我應該使用函數字段進行這樣的簡單計算嗎?
有沒有更簡單的方法可以做到這一點?
函數字段將是執行此類操作的好選擇。 這是使用功能字段將兩個字段相乘的示例代碼。
def multi_a_b(self, cr, uid, ids, name, arg, context=None):
res = {}
for record in self.browse(cr, uid, ids,context):
res[record.id] = record.field_a * record.field_b
return res
_columns = {
'field_a': fields.integer('A'),
'field_b': fields.integer('B'),
'field_c': fields.function(multi_a_b, type='integer', 'C'),
}
您需要將這些答案組合在一起。
首先將c4定義為user1576199的答案中指定的功能字段,然后創建Atul的答案中定義的on_change函數;
def onchange_value(self, cr, uid, ids, c1 = 0.0, c2 = 0.0, c3 = 0.0, context = None):
return {'value': {'c4': c1 + c2 + c3}}
但是,將on_change放在值c1到c3而不是c4上,就像這樣...
<field name="c1" on_change="onchange_value(c1, c2, c3, context) />
<field name="c2" on_change="onchange_value(c1, c2, c3, context)/>
<field name="c3" on_change="onchange_value(c1, c2, c3, context)/>
<field name="c4" />
c4是一個功能性字段,但是您仍然可以在其他字段的on_change value子句中返回它,並且屏幕上的值將刷新,但不會存儲在數據庫中,除非您在c4字段中添加store = True定義。
如果用戶更改c1,c2或c3字段中的任何一個,則將調用on_change方法,並且將重新計算總數並在顯示屏上刷新。
這是可能的解決方案
from osv import osv, fields
def multi_price_qty(self, cr, uid, ids, name, arg, context=None):
res = {}
for product in self.browse(cr, uid, ids,context):
res[product.id] = product.price * product.qty
return res
class abs_product(osv.Model):
_name = "abs.product"
_columns = {
'code': fields.char('Code', size=32),
'description': fields.char('Description', size=64),
'sizeunit': fields.char('Size /Unit', size=32),
'qty': fields.integer('Quantity', size=32),
'price': fields.integer('Price'),
'pullout': fields.char('Pull-Out', size=32),
'return': fields.char('Return', size=32),
'offtake': fields.char('Offtake', size=32),
'weeksales': fields.char('Weekly Sales', size=32),
'date': fields.date('Date'),
'totalprice': fields.function(multi_price_qty, type='integer', 'Total Price'),
}
abs_product()
我認為函數字段可以進行這種類型的計算。
或以其他方式放置按鈕,在按鈕上單擊將這兩個字段值相乘。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.