Odoo的Properties字段 - xiaohao0576/odoo-doc GitHub Wiki
从Odoo16开始,定义了一个Properties字段,可以在不增加数据库列的情况下,随意添加自定义字段,这些字段的值都存储在jsonb的数据类型中。
在Odoo17版本中,列表已经支持显示Properties中定义的属性,也支持以Properties定义的属性为条件进行筛选和分组操作,基本和普通字段差别不大了。
如果要使用Properties字段,还需要PropertiesDefinition字段搭配。
PropertiesDefinition字段定义在父类型, Properties在子类型里面关联,举例说明。
在HelpdeskTeam这个Model中,有下面一个字段
class HelpdeskTeam(models.Model):
ticket_properties = fields.PropertiesDefinition('Ticket Properties')
在HelpdeskTicket中,有下面两个字段
class HelpdeskTicket(models.Model):
team_id = fields.Many2one('helpdesk.team', string='Helpdesk Team', default=_default_team_id, index=True, tracking=True)
properties = fields.Properties('Properties', definition='team_id.ticket_properties',copy=True)
最终的效果是,在Helpdesk的Ticket页面可以随意增加不用类型的属性,并且不会导致数据库中helpdesk数据表的字段增多。并且每个Helpdesk Team的属性字段又相互独立,每个Helpdesk Team都可以拥有不同的自定义字段。
第二个例子是FleetVehicleModel
和FleetVehicle
,代码如下
class FleetVehicleModel(models.Model):
vehicle_properties_definition = fields.PropertiesDefinition('Vehicle Properties')
class FleetVehicle(models.Model):
model_id = fields.Many2one('fleet.vehicle.model', 'Model', tracking=True, required=True)
vehicle_properties = fields.Properties('Properties', definition='model_id.vehicle_properties_definition', copy=True)
以上代码就可以实现在FleetVehicle中为不同品牌的车辆定义不同的属性
如果一个Model有Properties类型的字段,在这个Model的Form页面下,点击齿轮图标,在存档、复制、删除下面,会有一个属性的按钮,点击这个按钮可以增加属性
更多例子,可以在源代码中搜索fields.Properties
关键字