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