openerp開發ORM對象基本信息

openerp的ORM映射繼承於

from openerp.osv import osv
class Demo(osv.osv) # osv.Model 同 osv
	pass

ORM 內置屬性

_name (必須 繼承非必須) : 表名 .換成_ 
    Default:None


_columns (必須) :數據庫字段
    Example:
        _columns = {
            'sex': fields.boolean('Sex?'), 
       }


_table : 默認表名 覆蓋_name


_description : 表描述
    Example:
        'this is description'


_defaults : 字段默認值
    Example:
        'manuf_warranty': lambda *a: False,


_order : 排序
    Default:'id'


_rec_name : name_get 返回的字段值
    Default:'name'。注意:默認情況下name_get方法簡單地返回該字段的內容。


_auto : 是否創建表 默認True 數據庫視圖需要False


_constraints : 插入更新時的檢查條件 檢索是否符合驗證
    Example:
        def check_date( self, cr, uid, ids ):
            pass
        _constraints = [
            (check_date, u'結束日期必須大於起始日期', ['startdate', 'enddate'] ),
        ]


_sql_constraints : 數據庫約束條件
    Example:
        _sql_constraints = [
            ('uniq_name', 'unique(name)', u'名稱必須唯一!'),
        ]


_inherit :
    Format:'object.name'
    For example:'res.partner'
    _name不填時 在原表上增加字段 用來擴展原表


_inherits : 繼承對象方法 數據庫上通過外鍵方式實現
    Example:
        { 'res.partner' : 'partner_id' }



內置方法

create: 創建記錄
    Example:
        def create(self, cr, uid, vals, context=None):
            pass
        obj = self.pool.get('openacademy.instructor')
        id = obj.create(cr,uid, {'name':'Jake', 'email': '[email protected]'})
write: 更新記錄
unlink: 刪除記錄
read: 讀取記錄中的字段
copy : 複製記錄
search: 搜索記錄
browse: 通過搜索標準搜索記錄
name_get: 僅返回名稱標識的記錄
name_search: 基於名稱在相關的領域搜索
init : _auto = False 的情況,通常重載該方法創建數據庫視圖。 
_auto_init : 通常重載該方法創建數據庫索引或 SQL 對象


字段

1.簡單類型

boolean:
    fields.boolean('Field Name' [, Optional Parameters]),
integer:
    fields.integer('Field Name' [, Optional Parameters]),
float:
    fields.float('Field Name' [, Optional Parameters]),
char:
    fields.char('City Name', size=30, required=True),
text:
    fields.text('Field Name' [, Optional Parameters]),
date:
    fields.date('Field Name' [, Optional Parameters]),
datetime:
    fields.datetime('Field Name' [, Optional Parameters]),
binary:
    fields.binary('Field Name' <span style="font-family: Arial, Helvetica, sans-serif;">[, Optional Parameters]),# 存儲二進制</span>
selection:
    Example 1:
        fields.selection((('n','Unconfirmed'), ('c','Confirmed')), 'Field Name' [, Optional Parameters]),
    Example 2:
        def _get_selection(self, cursor, user_id, context=None):
            return (('choice1', 'This is the choice 1'),
                    ('choice2', 'This is the choice 2'))
        _columns = {
            'sel' : fields.selection(_get_selection, 'What do you want ?')
        }
    Example 3:
        'my_field': fields.many2one(
                       'mymodule.relation.model',
                       'Title',
                       selection=_sel_func),
        def _sel_func(self, cr, uid, context=None):
            obj = self.pool.get('mymodule.relation.model')
            ids = obj.search(cr, uid, [])
            res = obj.read(cr, uid, ids, ['name', 'id'], context)
            res = [(r['id'], r['name']) for r in res]
            return res

2.關係類型

many2one 是在當前表 記錄引用表的外鍵關係
    例如:'partner_id': fields.many2one('res.partner') 當前表存儲res.partner的id
    Example:
        fields.many2one('other.object.name','Field Name', optional parameters)

one2many 和many2one相反 兩個表都指定是爲了建立雙向關係
    Example:
        fields.one2many('other.object.name','Field relation id', 'Fieldname', optional parameter)
one2one
    Example:
        fields.one2one('other.object.name', 'Field Name')
many2many 兩個表都指定是爲了建立雙向關係
    Example:
        fields.many2many('other.object.name','relation object', 'actual.object.id', 'other.object.id', 'Field Name')
related:
    引用關係


3.功能字段

function:
    def _get_average_value( self, cr, uid, ids, name, args, context=None):
        pass

    _columns = {
        'avg': fields.function (
                    _get_average_value,
                    fcnt_inv=_something_write, 
                    fcnt_search=_something_search, 
                    method=True, 
                    string=“Fields”, 
                    type=“float”, 
                    store=True )
    }

    fields.function(fnct, arg=None, fnct_inv=None, fnct_inv_arg=None, type="float",
    fnct_search=None, obj=None, method=False, store=False, multi=False)
    fnct :預先定義的函數,返回本字段值。
    fnct_inv :預定義的函數,保存返回值到數據庫。
    type :函數返回的本字段類型,可以是function以外的任何字段類型。 fnct_search :定義本字段的搜索行爲。
    method :True表示本字段函數來自於對象的方法,否則,來自於全局函數。 store :是否保存本字段到數據庫,默認值是False。
    multi :組名,multi 組名相同的字段值會一次性計算。

Store:當某些其他對象上的字段被修改時,這個字段 將重新計算
    store = {
        'object_name': (
            function_name,
            ['field_name1', 'field_name2'],
            priority
        )
    }

property:# 參考product/partner.py
    fields.property
    fields.property 類繼承自 fields.function,並重載覆蓋了讀和寫方法。這個字 段的類型是 many2one,所以在表單裏,一個屬性與一個 many2one 函數表現的一樣。



字段參數

string:
    字段的名稱,顯示在標籤或列標題。注意:使用unicode
change_default:
    無論用戶是否可以在定義依賴於這個字段的字段的默認值。 這些默認值需要在 ir.values 表裏定義。
help:
    幫助描述信息
ondelete:
    如何處理刪除相關的記錄 值爲
        'restrict':約束
        'no action':無操作
        'cascade':級聯刪除
        'set null':設置空值
        'set default':設置默認值
priority:未知
readonly:
    是否只讀
    Default:False
required:
    是否必填
    Default:False
size:
    大小
states:
    讓您覆蓋這個對象特定狀態的其他參數。接受一個表示狀態 名的字典鍵,和一個值的名稱/值元組列表作爲值。例如: states={'posted':[('readonly',True)]}
translate:
    是否翻譯
    Default:False
context:
    定義一個在視圖的上下文中可視內容或 on-change 函數。用於尋 找子表的 one2many 關係時?
domain:
    過濾
    Example: domain=[('field','=',value)])
invisible:
    表單中隱藏字段值,例如 密碼 字段
on_change:
    視圖中的 on_change 屬性默認值。這在字段值客戶端中變化時, 將啓動服務器上的定義的函數,當在客戶端領域的變化。 example,on_change="onchange_shop_id(shop_id)".。
relation:
    當一個字段是是另一個表的引用 id 時。這是對應表的名稱。通常 被 related 類型和 function 字段類型使用。
select:
    在視圖中選擇屬性的默認值。 1 表示基本搜索,2 表示高級搜索。




原文:http://blog.csdn.net/scopop/article/details/17116121



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章