_sql_constraints 和 _order
_sql_constraints定义数据表的约束条件,其格式如下例所示。
_sql_constraints = [
('code_company_uniq', 'unique (code,company_id)', 'The code of the account must be unique per company !')
]
本例的_sql_constraints会在数据表中增加下述约束:
CONSTRAINT ObjectName_code_company_uniq UNIQUE(code, company_id)
_order在对象的search或read方法中的select语句上加上"Order"子句,如 _order = 'name desc, account_id',对应SQL文的Order子句:order by name desc, account_id。
_defaults
_defaults属性用于定义字段的缺省值,其格式为:
_defaults:
{
'name_of_the_field':function, ...
}
function的返回值作为'name_of_the_field'字段的缺省值。function格式是:function(obj, cr, uid, context),返回值必须是简单类型,如boolean, integer, string 等。下面是_defaults的例子。
_defaults = {
'date_order': lambda *a: time.strftime('%Y−%m−%d'),
'state': lambda *a: 'draft',
'user_id': lambda obj, cr, uid, context: uid
}
lambda是Python的行函数,"lambda obj, cr, uid, context: uid"等同于下述函数:
def func(obj, cr, uid, context):
return uid
_inherit和_inherits
_inherit继承有两种情况:
1)如果子类中不定义_name属性,则相当于在父类中增加一些字段和方法,并不创建新对象。
2)如果子类中定义_name属性,则创建一个新对象,新对象拥有老对象的所有字段和方法,老对象不受任何影响。
两种情况的示例及继承关系的图示见下面。
class res_partner_add_langs(osv.osv):
_inherit = 'res.partner'
_columns = {
'lang_ids' : fields.many2many('res.lang', 'res_lang_partner_rel', 'partner_id', 'lang_id', 'Languages'),
}
res_partner_add_langs()
class cursus_category(osv.osv):
_name = 'cursus.category'
_inherits = {'account.analytic.caccount':'analytic_caccount_id'}
_columns = {
'analytic_caccount_id' : fields.many2one('account.analytic.caccount', 'ID'),
}
cursus_category()