1 2 3 4

ORM之字段属性对象Field

字段属性对象Field

Model的字段属性对应数据表中的相应字段,pg表中不同的字段有不同类型,Odoo也为其封装了相应的类型对象

Field类型的属性:

  • type = None 字段类型
  • relational = False 是否是关联字段
  • translate = False 字段是否翻译
  • column_type = None 数据库字段类型
  • column_format = '%s' 字段提示信息
  • _slots = {
    'args': EMPTY_DICT, # init()的设置参数
    '_attrs': EMPTY_DICT, # the field's non-slot attributes
    '_module': None, # 字段的模块名称
    '_setup_done': None, # 字段设置状态: None, 'base' or 'full'
    'automatic': False, # 是否是自动创建的字段 ("magic" field)
    'inherited': False, # 是否是继承的字段 (_inherits)
    'name': None, # 字段名称
    'model_name': None, # 字段所在的模型名称
    'comodel_name': None, # 关联字段的模型名称
    'store': True, # 字段值是否保存到数据库
    'index': False, # 是否在数据库中为字段添加索引
    'manual': False, # 是否是自定义字段
    'copy': True, # 字段值是否可以复制
    'depends': (), # 字段的依赖集合
    'recursive': False, # 是否自己依赖自己
    'compute': None, # 计算字段的计算方法
    'compute_sudo': False, # 字段是否以admin重新计算
    'inverse': None, # inverse(recs) inverses field on recs
    'search': None, # search(recs, operator, value) searches on self
    'related': None, # 依赖字段的名称
    'related_sudo': True, # whether related fields should be read as admin
    'company_dependent': False, # whether self is company-dependent (property field)
    'sparse': None, # the name of the corresponding serialized field, if any
    'default': None, # 字段默认值
    'string': None, # 字段说明
    'help': None, # 字段提示
    'readonly': False, # 是否只读
    'required': False, # 是否必填字段
    'states': None, # set readonly and required depending on state
    'groups': None, # csv list of group xml ids
    'change_default': False, # whether the field may trigger a "user-onchange"
    'deprecated': None, # whether the field is deprecated
    'related_field': None, # corresponding related field
    'group_operator': None, # 能够执行聚合的操作
    'group_expand': None, # name of method to expand groups in read_group()
    'prefetch': True, # whether the field is prefetched
    }

Odoo封装的字段对象主要有:

  • Boolean
  • Integer
  • Float
  • Monetary
  • Char
  • Text
  • Html
  • Date
  • Datetime
  • Binary
  • Selection
  • Reference
  • Many2one
  • One2many
  • Many2many

Boolean

Boolean字段的type值为boolean;column_type值为('bool', 'bool')
Boolean对应pg的字段类型为boolean
例:
active = fields.Boolean(default=True, help=u"设置字段是否有效")

Integer

Integer字段的type值为integer;column_type值为('int4', 'int4')
_slots = { 'group_operator': 'sum', }
Integer对应pg的字段类型为4个字节的integer,并且能执行sum的聚合操作
例:
sequence = fields.Integer(string=u'序号', default=1)

Float

Float字段type值为float;column_type值为('numeric', 'numeric')或('float8', 'double precision')
_slots = {'_digits': None, 'group_operator': 'sum',}
Float对应pg的字段类型为8个字节的double或变长的numeric,并且能执行sum聚合操作
例:
product_qty = fields.Float(string=u'产品数量', digits=dp.get_precision('Product Unit of Measure'), required=True, index=True)

Monetary

Monetary字段的type值为monetary;column_type值为('numeric', 'numeric')
_slots = {'currency_field': None, 'group_operator': 'sum', }
Monetary 对应pg的字段类型为变长的numeric,并且能执行sum聚合操作
例:
amount = fields.Monetary(string=u'金额', currency_field='company_currency_id')

Char

Char字段的type值为char;column_type值为('varchar', 'VARCHAR')
Char对应pg的字段类型为变长的VARCHAR
例:
name = fields.Char(string=u'名称', index=True, required=True)

Text

Text字段的type值为text;column_type值为('text', 'text')
Text对应pg的字段类型为长文本类型的text
例:
comment = fields.Text(string=u'评论')

Html

Html字段的type值为text;column_type值为('text', 'text')
Html对应pg的字段类型为长文本类型的text; Html是特殊的Text该字段能保存html代码
例:
comment = fields.Html(string=u'评论')

Date

Date字段的type值为date;column_type值为('date', 'date')
Date对应pg的字段类型为日期类型的date
例:
start_date = fields.Date(string=u'开始日期', default=fields.Date.today)

Datetime

Datetime字段的type值为datetime;column_type值为('timestamp', 'timestamp')
Datetime对应pg的字段类型为无时区的日期时间类型的timestamp
例:
start_time = fields.Date(string=u'开始时间', default=fields.Date.now)

Binary

Binary字段的type值为binary;column_type值为('bytea', 'bytea')
Binary对应pg的字段类型为二进制类型bytea

Selection

Selection字段的type值为selection;column_type值为('int4', 'integer')或('varchar', 'VARCHAR')
Selection对应pg的字段类型为4个字节的interger或者是不定长的varchar
例:
state = fields.Selection(selection=[('draft',u'草稿'), ('done', u'完成')], default='draft')

Reference

Reference字段的type值为reference;column_type值为('varchar', 'VARCHAR')
Reference对应pg的字段类型为不定长的varchar

Many2one

Many2one字段的type值为many2one;column_type值为('int4', 'int4')
_slots = {'ondelete': 'set null', 'auto_join': False, 'delegate': False, }
Many2one是一个多对一的外表关联字段,对应pg的字段类型是4个字节的integer
例:
partner_id = fields.Many2one(comodel_name='res.partner', string=u'业务伙伴')

One2many

One2many字段的type值为one2many;
_slots = {'inverse_name': None, 'auto_join': False, 'limit': None,'copy': False,}
One2many是一个一对多的关联字段,与Manyone形成呼应
例:
stock_quant_ids = fields.One2many(comodel_name='stock.quant', inverse_name='product_id')

Many2many

Many2many字段的type值为many2many;
_slots = {'relation': None, 'column1': None, 'column2': None, 'auto_join': False, 'limit': None,}
many2many是一个多对多的关联字段
例:
sale_line_ids = fields.Many2many(comodel_name='sale.order.line', relation='sale_order_line_invoice_rel', column1='invoice_line_id', column2='order_line_id', string='Sale Order Lines', readonly=True)



作者:路峰
链接:https://www.jianshu.com/p/76d88e2bd5db
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
posted @ 2020-04-27 20:09  I我的博客I  阅读(956)  评论(0编辑  收藏  举报