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)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,670评论 5 460
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,928评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,926评论 0 320
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,238评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,112评论 4 356
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,138评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,545评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,232评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,496评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,596评论 2 310
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,369评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,226评论 3 313
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,600评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,906评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,185评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,516评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,721评论 2 335

推荐阅读更多精彩内容