【odoo二次開(kāi)發(fā)】ORM框架(一、Model屬性)

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)容。效果如下:

截于odoo自帶項(xiàng)目管理模塊

關(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.advicecompany_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中常用的方法。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末片橡,一起剝皮案震驚了整個(gè)濱河市妈经,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌锻全,老刑警劉巖狂塘,帶你破解...
    沈念sama閱讀 219,490評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異鳄厌,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)妈踊,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,581評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)了嚎,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人,你說(shuō)我怎么就攤上這事歪泳÷芮冢” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,830評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵呐伞,是天一觀的道長(zhǎng)敌卓。 經(jīng)常有香客問(wèn)我,道長(zhǎng)伶氢,這世上最難降的妖魔是什么趟径? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,957評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮癣防,結(jié)果婚禮上蜗巧,老公的妹妹穿的比我還像新娘。我一直安慰自己蕾盯,他們只是感情好幕屹,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,974評(píng)論 6 393
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著级遭,像睡著了一般望拖。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上挫鸽,一...
    開(kāi)封第一講書(shū)人閱讀 51,754評(píng)論 1 307
  • 那天靠娱,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛店溢,可吹牛的內(nèi)容都是我干的使套。 我是一名探鬼主播,決...
    沈念sama閱讀 40,464評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼因惭,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起侈贷,我...
    開(kāi)封第一講書(shū)人閱讀 39,357評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎等脂,沒(méi)想到半個(gè)月后俏蛮,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,847評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡上遥,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,995評(píng)論 3 338
  • 正文 我和宋清朗相戀三年搏屑,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片粉楚。...
    茶點(diǎn)故事閱讀 40,137評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡辣恋,死狀恐怖亮垫,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情伟骨,我是刑警寧澤饮潦,帶...
    沈念sama閱讀 35,819評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站携狭,受9級(jí)特大地震影響继蜡,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜逛腿,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,482評(píng)論 3 331
  • 文/蒙蒙 一稀并、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧鳄逾,春花似錦稻轨、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,023評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至枚抵,卻和暖如春线欲,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背汽摹。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,149評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工李丰, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人逼泣。 一個(gè)月前我還...
    沈念sama閱讀 48,409評(píng)論 3 373
  • 正文 我出身青樓趴泌,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親拉庶。 傳聞我的和親對(duì)象是個(gè)殘疾皇子嗜憔,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,086評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • 記錄集 model的數(shù)據(jù)是通過(guò)數(shù)據(jù)集合的形式來(lái)使用的,定義在model里的函數(shù)執(zhí)行時(shí)它們的self變量也是一個(gè)數(shù)據(jù)...
    XiaoHaiYang閱讀 16,904評(píng)論 0 16
  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理氏仗,服務(wù)發(fā)現(xiàn)吉捶,斷路器,智...
    卡卡羅2017閱讀 134,672評(píng)論 18 139
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語(yǔ)法皆尔,類(lèi)相關(guān)的語(yǔ)法呐舔,內(nèi)部類(lèi)的語(yǔ)法,繼承相關(guān)的語(yǔ)法慷蠕,異常的語(yǔ)法珊拼,線程的語(yǔ)...
    子非魚(yú)_t_閱讀 31,644評(píng)論 18 399
  • 傲姐提供的案例,聶大大連給的幾個(gè)規(guī)范嗎砌们?我繼續(xù)深入思考杆麸。 環(huán)境不同搁进。 一浪感、在媽媽面前昔头,他的角色是兒子,他與媽媽之...
    沱沱河rf閱讀 271評(píng)論 0 0
  • 老師終于回來(lái)了影兽,我的笑容也回來(lái)了揭斧,整個(gè)下午我都迎著笑容上課。
    李俊昊2閱讀 227評(píng)論 0 2