1.基礎(chǔ)文件及目錄結(jié)構(gòu)
在認(rèn)識(shí)odoo ORM框架前炼杖,先介紹一下odoo中模塊目錄結(jié)構(gòu)灭返。
data
:存放模塊預(yù)制數(shù)據(jù)i18n
:存放國(guó)際化文件models
:存放模型等py代碼security
:存放權(quán)限文件views
:存放視圖文件__manifest__.py
:該文件用于聲明該模塊,并指定一些模塊元數(shù)據(jù)坤邪。(odoo8時(shí)該文件為__openerp__.py
熙含。)
# -*- coding: utf-8 -*-
{
# name:模塊名稱(chēng)
'name': " test",
# description:模塊描述
'description': """
自定義模塊
""",
# author:模塊作者(XXX公司或張三)
'author': "Hu",
# website:作者或公司網(wǎng)址
'website': "http://weibo.com/hcw1202",
# category:模塊分類(lèi)
'category': "test",
# version:模塊版本
'version': "版本",
# depends:所依賴(lài)其他模塊
'depends': ["base","stock","sale"],
# 模塊安裝時(shí)加載
'data': [
'security/權(quán)限文件.csv',
'data/預(yù)制數(shù)據(jù).xml',
'views/視圖文件.xml',
],
# 創(chuàng)建數(shù)據(jù)庫(kù)時(shí)勾選Load demonstration data后安裝該模塊加載演示數(shù)據(jù)
'demo': [
'data/演示數(shù)據(jù).xml',
],
}
2.Model屬性
在/models下添加test.py
文件
# -*- coding: utf-8 -*-
from odoo import models, api, fields, _
class Test(models.Model):
# 模型唯一標(biāo)識(shí)(對(duì)應(yīng)數(shù)據(jù)表為product_manage_product)
_name = 'product_manage.product'
# 數(shù)據(jù)顯示名稱(chēng),如設(shè)置則返回其指定的字段值
_rec_name = 'test_field'
# 字段
test_field = fields.Char(string="字段名稱(chēng)")
model屬性詳解:
_name
:模型唯一標(biāo)識(shí)艇纺,類(lèi)非繼承父類(lèi)時(shí)必須指定怎静。
_rec_name
:數(shù)據(jù)顯示名稱(chēng),如設(shè)置則返回其指定的字段值喂饥,不設(shè)置默認(rèn)顯示字段為name的字段值消约,如無(wú)name字段則顯示"模塊名,id"肠鲫;詳見(jiàn)BaseModel.name_get
方法员帮。
_log_access
:是否自動(dòng)增加日志字段(create_uid
, create_date
,write_uid
, write_date
)。默認(rèn)為T(mén)rue导饲。
_auto
:是否創(chuàng)建數(shù)據(jù)庫(kù)對(duì)象捞高。默認(rèn)為T(mén)rue,詳見(jiàn)BaseModel._auto_init方法渣锦。
_table
:數(shù)據(jù)庫(kù)對(duì)象名稱(chēng)硝岗。缺省時(shí)數(shù)據(jù)庫(kù)對(duì)象名稱(chēng)與_name指定值相同(.
替換為下劃線)。
_sequence
:數(shù)據(jù)庫(kù)id字段的序列袋毙。默認(rèn)自動(dòng)創(chuàng)建序列型檀。
_order
:數(shù)據(jù)顯示排序。所指定值為模型字段听盖,按指定字段和方式排序結(jié)果集胀溺。
例:_order = "create_date desc":根據(jù)創(chuàng)建時(shí)間降序排列裂七。可指定多個(gè)字段仓坞。
不指定desc默認(rèn)升序排列背零;不指定_order默認(rèn)id升序排列。
_constraints
:自定義約束條件无埃。模型創(chuàng)建/編輯數(shù)據(jù)時(shí)觸發(fā)徙瓶,約束未通過(guò)彈出錯(cuò)誤提示,拒絕創(chuàng)建/編輯嫉称。
格式:
_constraints = [(method, 'error message', [field1, ...]), ...]
method
:檢查方法侦镇。返回True|False
error message
:不符合檢查條件時(shí)(method返回False)彈出的錯(cuò)誤信息
[field1, ...]
:字段名列表,這些字段的值會(huì)出現(xiàn)在error message中织阅。
_sql_constraints
:數(shù)據(jù)庫(kù)約束虽缕。
例:
_sql_constraints = [ ('number_uniq', 'unique(number, code)', 'error message') ]
會(huì)在數(shù)據(jù)庫(kù)添加約束:
CONSTRAINT number_uniq UNIQUE(number, code)
_inherit
:?jiǎn)我焕^承。值為所繼承父類(lèi)_name標(biāo)識(shí)蒲稳。如子類(lèi)不定義_name屬性氮趋,則在父類(lèi)中增加該子類(lèi)下的字段或方法,不創(chuàng)建新對(duì)象江耀;如子類(lèi)定義_name屬性剩胁,則創(chuàng)建新對(duì)象,新對(duì)象擁有父類(lèi)所有的字段或方法祥国,父類(lèi)不受影響昵观。
格式:
_inherit = '父類(lèi) _name'
_inherits
:多重繼承。子類(lèi)通過(guò)關(guān)聯(lián)字段與父類(lèi)關(guān)聯(lián)舌稀,子類(lèi)不擁有父類(lèi)的字段或方法啊犬,但是可以直接操作父類(lèi)的字段或方法。
格式:
_inherits = {'父類(lèi) _name': '關(guān)聯(lián)字段'}
3.字段屬性
基礎(chǔ)類(lèi)型
Char
:字符型壁查,使用size參數(shù)定義字符串長(zhǎng)度觉至。
Text
:文本型,無(wú)長(zhǎng)度限制睡腿。
Boolean
:布爾型(True语御,F(xiàn)alse)
Interger
:整型
Float
:浮點(diǎn)型,使用digits參數(shù)定義整數(shù)部分和小數(shù)部分位數(shù)席怪。如digits=(10,6)
Datetime
:日期時(shí)間型
Date
:日期型
Binary
:二進(jìn)制型
selection
:下拉框字段应闯。
例:
state = fields.Selection([('draft', 'Draft'),('confirm', 'Confirmed'),('cancel', 'Cancelled')], string='Status')
Html
:可設(shè)置字體格式、樣式挂捻,可添加圖片碉纺、鏈接等內(nèi)容。效果如下:
關(guān)系類(lèi)型
One2many
:一對(duì)多關(guān)系。
定義:
otm = fields.One2many("關(guān)聯(lián)對(duì)象 _name", "關(guān)聯(lián)字段",string="字段顯示名",...
)
例:analytic_line_ids = fields.One2many('account.analytic.line', 'move_id', string='Analytic lines')"
Many2one
定義:
mto = fields.Many2one("關(guān)聯(lián)對(duì)象 _name", string="字段顯示名",...
)
可選參數(shù):ondelete骨田,可選值為‘cascade’和‘null’唬涧,缺省為null。表示one端刪除時(shí)many端是否級(jí)聯(lián)刪除盛撑。
Many2many
定義:
mtm = fields.Many2many("關(guān)聯(lián)對(duì)象 _name", "關(guān)聯(lián)表/中間表","關(guān)聯(lián)字段1","關(guān)聯(lián)字段2",string="字段顯示名"
,...)
其中碎节,關(guān)聯(lián)字段、關(guān)聯(lián)表/中間表可不填抵卫,中間表缺省為:表1_表2_rel
例:partner_id= fields.Many2many("res.partner", string="字段顯示名",...)"
復(fù)雜類(lèi)型
參數(shù)
readonly
:是否只讀狮荔,缺省值False。
required
:是否必填介粘,缺省值Falsse殖氏。
string
:字段顯示名,任意字符串姻采。
default
:字段默認(rèn)值
domain
:域條件雅采,缺省值[]。在關(guān)系型字段中慨亲,domain用于過(guò)濾關(guān)聯(lián)表中數(shù)據(jù)婚瓜。
help
:字段描述,鼠標(biāo)滑過(guò)時(shí)提示刑棵。
store
:是否存儲(chǔ)于數(shù)據(jù)庫(kù)巴刻。結(jié)合compute和related使用。
例:
sale_order = fields.One2many("sale.order", "contract_id",string="銷(xiāo)售訂單", domain=[('state','=','sale')])
compute
:字段值由函數(shù)計(jì)算蛉签,該字段可不儲(chǔ)存于數(shù)據(jù)庫(kù)胡陪。
例:
amount = fields.Float(string="金額總計(jì)", compute=‘_compute_amount’,store=True)
_compute_amount
為計(jì)算函數(shù)。
related
:字段值引用關(guān)聯(lián)表中某字段碍舍。
以下代碼表示:
company_id
引用hr.payroll.advice
中company_id
advice_id = fields.Many2one('hr.payroll.advice', string='Bank Advice')
company_id = fields.Many2one('res.company', related='advice_id.company_id', string='Company', store=True)
4.最后
以上即是Model的主要屬性柠座,下一節(jié)會(huì)介紹Model中常用的方法。