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

1.基礎(chǔ)文件及目錄結(jié)構(gòu)

在認(rèn)識odoo ORM框架前,先介紹一下odoo中模塊目錄結(jié)構(gòu)。


data:存放模塊預(yù)制數(shù)據(jù)
i18n:存放國際化文件
models:存放模型等py代碼
security:存放權(quán)限文件
views:存放視圖文件
__manifest__.py:該文件用于聲明該模塊,并指定一些模塊元數(shù)據(jù)。(odoo8時該文件為__openerp__.py。)

# -*- coding: utf-8 -*-
{
    # name:模塊名稱
    'name': " test",

    # description:模塊描述
    'description': """
        自定義模塊
    """,

    # author:模塊作者(XXX公司或張三)
    'author': "Hu",

    # website:作者或公司網(wǎng)址
    'website': "http://weibo.com/hcw1202",

    # category:模塊分類
    'category': "test",

    # version:模塊版本
    'version': "版本",

    # depends:所依賴其他模塊
    'depends': ["base","stock","sale"],

    # 模塊安裝時加載
    'data': [
        'security/權(quán)限文件.csv',
        'data/預(yù)制數(shù)據(jù).xml',
        'views/視圖文件.xml',
    ],

    # 創(chuàng)建數(shù)據(jù)庫時勾選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)識(對應(yīng)數(shù)據(jù)表為product_manage_product)
    _name = 'product_manage.product'
    # 數(shù)據(jù)顯示名稱,如設(shè)置則返回其指定的字段值
    _rec_name = 'test_field'
    # 字段
    test_field = fields.Char(string="字段名稱")

model屬性詳解:
_name:模型唯一標(biāo)識,類非繼承父類時必須指定。
_rec_name:數(shù)據(jù)顯示名稱,如設(shè)置則返回其指定的字段值,不設(shè)置默認(rèn)顯示字段為name的字段值,如無name字段則顯示"模塊名,id";詳見BaseModel.name_get方法。
_log_access:是否自動增加日志字段(create_uid, create_date,write_uid, write_date)。默認(rèn)為True。
_auto:是否創(chuàng)建數(shù)據(jù)庫對象。默認(rèn)為True,詳見BaseModel._auto_init方法。
_table:數(shù)據(jù)庫對象名稱。缺省時數(shù)據(jù)庫對象名稱與_name指定值相同(.替換為下劃線)。
_sequence:數(shù)據(jù)庫id字段的序列。默認(rèn)自動創(chuàng)建序列。
_order:數(shù)據(jù)顯示排序。所指定值為模型字段,按指定字段和方式排序結(jié)果集。

例:_order = "create_date desc":根據(jù)創(chuàng)建時間降序排列。可指定多個字段。
不指定desc默認(rèn)升序排列;不指定_order默認(rèn)id升序排列。

_constraints:自定義約束條件。模型創(chuàng)建/編輯數(shù)據(jù)時觸發(fā),約束未通過彈出錯誤提示,拒絕創(chuàng)建/編輯。

格式:_constraints = [(method, 'error message', [field1, ...]), ...]
method:檢查方法。返回True|False
error message:不符合檢查條件時(method返回False)彈出的錯誤信息
[field1, ...]:字段名列表,這些字段的值會出現(xiàn)在error message中。

_sql_constraints:數(shù)據(jù)庫約束。

例:_sql_constraints = [ ('number_uniq', 'unique(number, code)', 'error message') ]
會在數(shù)據(jù)庫添加約束:
CONSTRAINT number_uniq UNIQUE(number, code)

_inherit:單一繼承。值為所繼承父類_name標(biāo)識。如子類不定義_name屬性,則在父類中增加該子類下的字段或方法,不創(chuàng)建新對象;如子類定義_name屬性,則創(chuàng)建新對象,新對象擁有父類所有的字段或方法,父類不受影響。

格式:_inherit = '父類 _name'

_inherits:多重繼承。子類通過關(guān)聯(lián)字段與父類關(guān)聯(lián),子類不擁有父類的字段或方法,但是可以直接操作父類的字段或方法。

格式:_inherits = {'父類 _name': '關(guān)聯(lián)字段'}

3.字段屬性

基礎(chǔ)類型

Char:字符型,使用size參數(shù)定義字符串長度。
Text:文本型,無長度限制。
Boolean:布爾型(True,F(xiàn)alse)
Interger:整型
Float:浮點型,使用digits參數(shù)定義整數(shù)部分和小數(shù)部分位數(shù)。如digits=(10,6)
Datetime:日期時間型
Date:日期型
Binary:二進(jìn)制型
selection:下拉框字段。

例:state = fields.Selection([('draft', 'Draft'),('confirm', 'Confirmed'),('cancel', 'Cancelled')], string='Status')

Html:可設(shè)置字體格式、樣式,可添加圖片、鏈接等內(nèi)容。效果如下:

截于odoo自帶項目管理模塊

關(guān)系類型

One2many:一對多關(guān)系。

定義:otm = fields.One2many("關(guān)聯(lián)對象 _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)對象 _name", string="字段顯示名",...)
可選參數(shù):ondelete,可選值為‘cascade’和‘null’,缺省為null。表示one端刪除時many端是否級聯(lián)刪除。

Many2many

定義:mtm = fields.Many2many("關(guān)聯(lián)對象 _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ù)雜類型

參數(shù)

readonly:是否只讀,缺省值False。
required:是否必填,缺省值Falsse。
string:字段顯示名,任意字符串。
default:字段默認(rèn)值
domain:域條件,缺省值[]。在關(guān)系型字段中,domain用于過濾關(guān)聯(lián)表中數(shù)據(jù)。
help:字段描述,鼠標(biāo)滑過時提示。
store:是否存儲于數(shù)據(jù)庫。結(jié)合compute和related使用。

例:sale_order = fields.One2many("sale.order", "contract_id",string="銷售訂單", domain=[('state','=','sale')])

compute:字段值由函數(shù)計算,該字段可不儲存于數(shù)據(jù)庫。

例:amount = fields.Float(string="金額總計", compute=‘_compute_amount’,store=True)
_compute_amount為計算函數(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é)會介紹Model中常用的方法。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

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

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