我如何使用燃料类型字典和相应的默认单价整数值创建一个方法,并使它们出现在 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