我如何使用燃料类型字典和相应的默认单价整数值创建一个方法,并使它们出现在 Odoo 的表单中
How do I create a method with a dict of fuel types and corresponding default unit prices integer values and make them appear in a form in Odoo
如何实现当用户在表格中选择燃料类型时,单价会自动显示整数所选相应燃料类型的单位值。例如,当用户选择 petroleum
时,0.87
(货币单位为美元) 的值应自动出现在单价字段中。
这里是我创建的class注册站
的代码
# Fuel Station register Class
class fleet_fuel_stn_reg(osv.Model):
_name = 'fleet.fuel.station.reg'
_description = 'Contains fuel station details to register'
_columns = {
'station':fields.char('Station Name'),
# 'partner':fields.many2one('fleet.partner','Partner', required=True),
'location':fields.char('Location', help='Location of the vehicle (garage, ...'),
'fuel_type': fields.selection([('petroleum', 'Petroleum'), ('diesel', 'Diesel'), ('kerosene', 'Kerosene')], 'Fuel Type', help='Fuel Used by the vehicle'),
'stocklevel':fields.float('Stock Level'),
'unit':fields.selection([('litres', 'Litres')], 'Odometer Unit', help='Unit of the odometer ',required=True),
'unit_price':fields.float('Unit Price'),
'init_stock':fields.float('Initial Stock'),
'init_stock_taken':fields.date('Initial Stock Taken In'),
}
界面如下所示:
我假设您使用的是 Odoo 版本 8 或更高版本(因为您的问题标签),所以首先,如果您正在创建一个新模型,就像在这种情况下,您应该使用新 API,这对您来说会容易得多。因此,让我们将您的代码从旧的 API 移动到新的 API,您要查找的内容将由 onchange
方法完成:
from openerp import models, fields, api
# Fuel Station register Class
class FleetFuelStnReg(models.Model):
_name = 'fleet.fuel.station.reg'
_description = 'Contains fuel station details to register'
station = fields.Char(
string='Station Name',
)
location = fields.Char(
string='Location',
help='Location of the vehicle (garage, ...)',
)
fuel_type = fields.Selection(
selection=[
('petroleum', 'Petroleum'),
('diesel', 'Diesel'),
('kerosene', 'Kerosene'),
],
string='Fuel Type',
help='Fuel Used by the vehicle',
)
stocklevel = fields.Float(
string='Stock Level',
)
unit = fields.Selection(
selection=[
('litres', 'Litres'),
],
string='Odometer Unit',
help='Unit of the odometer',
required=True,
)
unit_price: fields.Float(
string='Unit Price'
)
init_stock: fields.Float(
string='Initial Stock'
)
init_stock_taken = fields.Date(
string='Initial Stock Taken In',
)
@api.onchange('fuel_type')
def onchange_fuel_type(self):
if self.fuel_type == 'petroleum':
self.unit_price = 0.87
elif self.fuel_type == 'diesel':
self.unit_price = 0.70
else:
self.unit_price = 0.99
编辑
正如您评论我说燃料类型没有固定值一样,该字段不能是 Selection
一个。您必须使用 Many2one
字段,这意味着您必须先为燃料类型创建一个 class:
from openerp import models, fields, api
class FuelType(models.Model):
_name = 'fuel.type'
_description = 'All the available fuel types'
name = fields.Char(
string='Name',
required=True,
)
price_unit = fields.Float(
string='Unit price',
required=True,
)
# Fuel Station register Class
class FleetFuelStnReg(models.Model):
_name = 'fleet.fuel.station.reg'
_description = 'Contains fuel station details to register'
station = fields.Char(
string='Station Name',
)
location = fields.Char(
string='Location',
help='Location of the vehicle (garage, ...)',
)
fuel_type = fields.Many2one(
comodel_name='fuel.type',
string='Fuel Type',
help='Fuel Used by the vehicle',
)
stocklevel = fields.Float(
string='Stock Level',
)
unit = fields.Selection(
selection=[
('litres', 'Litres'),
],
string='Odometer Unit',
help='Unit of the odometer',
required=True,
)
unit_price: fields.Float(
string='Unit Price'
)
init_stock: fields.Float(
string='Initial Stock'
)
init_stock_taken = fields.Date(
string='Initial Stock Taken In',
)
@api.onchange('fuel_type')
def onchange_fuel_type(self):
self.unit_price = self.fuel_type.price_unit
如何实现当用户在表格中选择燃料类型时,单价会自动显示整数所选相应燃料类型的单位值。例如,当用户选择 petroleum
时,0.87
(货币单位为美元) 的值应自动出现在单价字段中。
这里是我创建的class注册站
的代码# Fuel Station register Class
class fleet_fuel_stn_reg(osv.Model):
_name = 'fleet.fuel.station.reg'
_description = 'Contains fuel station details to register'
_columns = {
'station':fields.char('Station Name'),
# 'partner':fields.many2one('fleet.partner','Partner', required=True),
'location':fields.char('Location', help='Location of the vehicle (garage, ...'),
'fuel_type': fields.selection([('petroleum', 'Petroleum'), ('diesel', 'Diesel'), ('kerosene', 'Kerosene')], 'Fuel Type', help='Fuel Used by the vehicle'),
'stocklevel':fields.float('Stock Level'),
'unit':fields.selection([('litres', 'Litres')], 'Odometer Unit', help='Unit of the odometer ',required=True),
'unit_price':fields.float('Unit Price'),
'init_stock':fields.float('Initial Stock'),
'init_stock_taken':fields.date('Initial Stock Taken In'),
}
界面如下所示:
我假设您使用的是 Odoo 版本 8 或更高版本(因为您的问题标签),所以首先,如果您正在创建一个新模型,就像在这种情况下,您应该使用新 API,这对您来说会容易得多。因此,让我们将您的代码从旧的 API 移动到新的 API,您要查找的内容将由 onchange
方法完成:
from openerp import models, fields, api
# Fuel Station register Class
class FleetFuelStnReg(models.Model):
_name = 'fleet.fuel.station.reg'
_description = 'Contains fuel station details to register'
station = fields.Char(
string='Station Name',
)
location = fields.Char(
string='Location',
help='Location of the vehicle (garage, ...)',
)
fuel_type = fields.Selection(
selection=[
('petroleum', 'Petroleum'),
('diesel', 'Diesel'),
('kerosene', 'Kerosene'),
],
string='Fuel Type',
help='Fuel Used by the vehicle',
)
stocklevel = fields.Float(
string='Stock Level',
)
unit = fields.Selection(
selection=[
('litres', 'Litres'),
],
string='Odometer Unit',
help='Unit of the odometer',
required=True,
)
unit_price: fields.Float(
string='Unit Price'
)
init_stock: fields.Float(
string='Initial Stock'
)
init_stock_taken = fields.Date(
string='Initial Stock Taken In',
)
@api.onchange('fuel_type')
def onchange_fuel_type(self):
if self.fuel_type == 'petroleum':
self.unit_price = 0.87
elif self.fuel_type == 'diesel':
self.unit_price = 0.70
else:
self.unit_price = 0.99
编辑
正如您评论我说燃料类型没有固定值一样,该字段不能是 Selection
一个。您必须使用 Many2one
字段,这意味着您必须先为燃料类型创建一个 class:
from openerp import models, fields, api
class FuelType(models.Model):
_name = 'fuel.type'
_description = 'All the available fuel types'
name = fields.Char(
string='Name',
required=True,
)
price_unit = fields.Float(
string='Unit price',
required=True,
)
# Fuel Station register Class
class FleetFuelStnReg(models.Model):
_name = 'fleet.fuel.station.reg'
_description = 'Contains fuel station details to register'
station = fields.Char(
string='Station Name',
)
location = fields.Char(
string='Location',
help='Location of the vehicle (garage, ...)',
)
fuel_type = fields.Many2one(
comodel_name='fuel.type',
string='Fuel Type',
help='Fuel Used by the vehicle',
)
stocklevel = fields.Float(
string='Stock Level',
)
unit = fields.Selection(
selection=[
('litres', 'Litres'),
],
string='Odometer Unit',
help='Unit of the odometer',
required=True,
)
unit_price: fields.Float(
string='Unit Price'
)
init_stock: fields.Float(
string='Initial Stock'
)
init_stock_taken = fields.Date(
string='Initial Stock Taken In',
)
@api.onchange('fuel_type')
def onchange_fuel_type(self):
self.unit_price = self.fuel_type.price_unit