之前我們已經(jīng)講解了odoo ORM中的一些對字段常用的API操作方法砸泛,今天我們繼續(xù)研究一下Odoo orm中字段的一些通用屬性字段的使用,學會它們可以為自己創(chuàng)建數(shù)據(jù)映射并使用有更好的幫助。
通用字段屬性
實例化映射模型的時候時可以使用以下屬性
-
string(str)
- xml視圖在渲染的時候會顯示這個值的內(nèi)容期揪。
fandx_name = fields.Char(string="姓名")
-
help(str)
- 幫助文字,鼠標放到對應字段上面會出現(xiàn)help的描述內(nèi)容规个。
fandx_name = fields.Char(help="這是一個姓名")
-
readonly(bool)
- 是否是只讀凤薛,只讀則不可以修改字段的內(nèi)容,在視圖中不可以修改對應字段的內(nèi)容绰姻。
fand_name = fields.Char(string="姓名", readonly=True)
-
required(bool)
- 是否必填枉侧,如果required為True,那么這個字在XML視圖顯示的時候不填則保存的時候會報錯狂芋。
fandx_name = fields.Char(string="姓名", readonly=True, required=True)
-
index(bool)
- 是否在數(shù)據(jù)庫建立索引榨馁,加上索引的字段在搜索的時候會有速度的提升。
fandx_name = fields.Char(string="姓名", readonly=True, required=True, index=True)
-
default(value 或者 callable)
default可以設(shè)置這個字段的默認值帜矾。
default的內(nèi)容可以是固定的默認值翼虫。
default也可以是一個被調(diào)用的function,default的值會自動設(shè)置為function的返回值屡萤。
方式一:
fandx_name = fields.Char(string="姓名", default="張三")
方式二:
fandx_name = fields.Char(string="姓名", default=lambda self: self.env.user.display_name)
-
方式三:
def _defult_name(self): return self.env.user.display_name fandx_name = fields.Char(string="姓名", invisible=True, default=_defult_name)
-
states(bool)
這個可以根據(jù)state狀態(tài)的的值動態(tài)改變字段在XML中的顯示狀態(tài)珍剑。
-
必須配合state狀態(tài)字段使用。
model.py
state = fields.Selection([('create', '創(chuàng)建'), ('finish', '已完成')], string='狀態(tài)', default='create') fandx_test = fields.Char("測試字段", states={'create': [('required', True)], 'finish': [('readonly', True)]})
View.xml
<field name="state" /> <field name="fandx_test" />
注意:K缆健U凶尽唧瘾!用到這個方法必須要在xml視圖中加載state字段,如果不加載則會報JS錯誤别凤。
-
groups(str)
- 權(quán)限組饰序,odoo中可以去配置自己的權(quán)限組,可以給指定的字段賦予權(quán)限組规哪,這個字段會根據(jù)權(quán)限組的內(nèi)容設(shè)置進行限制增刪改查權(quán)限求豫。
fandx_name = fields.Char(string="姓名", default="張三", groups='base.group_user')
-
company_dependent(bool)
- 這個字段如果為True的話,這個字段的數(shù)據(jù)值會根據(jù)登錄的用戶的公司進行綁定诉稍,可以實現(xiàn)不同用戶不同字段內(nèi)容顯示蝠嘉。
fandx_name = fields.Char(string="姓名", company_dependent=True)
-
copy(bool)
- odoo有自帶的模型快速復制的功能,這個如果copy的值為False那么就不會被復制杯巨,這個值默認值為True蚤告,one2many字段和計算字段是默認為Fasle的。
fandx_name = fields.Char(string="姓名", company_dependent=True, copy=False)
-
store(bool)
- 是否存儲到數(shù)據(jù)庫中舔箭,默認值為True罩缴,compute計算字段默認值為False蚊逢。
fandx_name = fields.Char(string="姓名", store=False)
-
group_operator(str)
-
這里的str內(nèi)容是固定的選擇层扶,在搜索分組的時候計算字段的值會用到這個group_operator的內(nèi)容。
count - 計算數(shù)量烙荷。
count_distinct - 數(shù)據(jù)不同的數(shù)量镜会。
bool_and - 如果所有值都為true,則為true终抽,否則為false戳表。
bool_or - true if at least one value is true, otherwise false。
max - 最大值昼伴。
min - 最小值匾旭。
avg - 平均值。
-
sum - 求和圃郊。
-
fandx_nums = fields.Integer(string="a_test", group_operator='sum')
-
group_expand(str)
-
這里傳進一個方法名稱价涝,在分組的時候會進行調(diào)用這個方法。
state = fields.Selection([('create', '創(chuàng)建'), ('finish', '已完成')], string='狀態(tài)', default='create', group_expand="_expand_states") def _expand_states(self, states, domain, order): # 這里返回需要成組的字段持舆,如果按state分組就會走到這個方法色瘩! return [key for key, val in type(self).state.selection]
-
總結(jié)
- 通用屬性在創(chuàng)建字段的時候是經(jīng)常會用到的,我們需要靈活的使用它們逸寓。
- 還有compute計算屬性居兆,這里就先不做解釋,后面單獨去講解它竹伸。
- 如果有問題請在下方留言討論