之前我們已經講解了odoo ORM中的一些對欄位常用的API操作方法,今天我們繼續研究一下Odoo orm中欄位的一些通用屬性欄位的使用,學會它們可以為自己建立資料對映並使用有更好的幫助。
通用欄位屬性
例項化對映模型的時候時可以使用以下屬性
-
string(str)
- xml檢視在渲染的時候會顯示這個值的內容。
fandx_name = fields.Char(string="姓名")
-
help(str)
- 幫助文字,滑鼠放到對應欄位上面會出現help的描述內容。
fandx_name = fields.Char(help="這是一個姓名")
-
readonly(bool)
- 是否是隻讀,只讀則不可以修改欄位的內容,在檢視中不可以修改對應欄位的內容。
fand_name = fields.Char(string="姓名", readonly=True)
-
required(bool)
- 是否必填,如果required為True,那麼這個字在XML檢視顯示的時候不填則儲存的時候會報錯。
fandx_name = fields.Char(string="姓名", readonly=True, required=True)
-
index(bool)
- 是否在資料庫建立索引,加上索引的欄位在搜尋的時候會有速度的提升。
fandx_name = fields.Char(string="姓名", readonly=True, required=True, index=True)
-
default(value 或者 callable)
-
default可以設定這個欄位的預設值。
-
default的內容可以是固定的預設值。
-
default也可以是一個被呼叫的function,default的值會自動設定為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)
-
這個可以根據state狀態的的值動態改變欄位在XML中的顯示狀態。
-
必須配合state狀態欄位使用。
model.py
state = fields.Selection([('create', '建立'), ('finish', '已完成')], string='狀態', default='create') fandx_test = fields.Char("測試欄位", states={'create': [('required', True)], 'finish': [('readonly', True)]})
View.xml
<field name="state" /> <field name="fandx_test" />
-
注意:!!!用到這個方法必須要在xml檢視中載入state欄位,如果不載入則會報JS錯誤。
-
-
groups(str)
- 許可權組,odoo中可以去配置自己的許可權組,可以給指定的欄位賦予許可權組,這個欄位會根據許可權組的內容設定進行限制增刪改查許可權。
fandx_name = fields.Char(string="姓名", default="張三", groups='base.group_user')
-
company_dependent(bool)
- 這個欄位如果為True的話,這個欄位的資料值會根據登入的使用者的公司進行繫結,可以實現不同使用者不同欄位內容顯示。
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)
- 是否儲存到資料庫中,預設值為True,compute計算欄位預設值為False。
fandx_name = fields.Char(string="姓名", store=False)
-
group_operator(str)
-
這裡的str內容是固定的選擇,在搜尋分組的時候計算欄位的值會用到這個group_operator的內容。
-
count - 計算數量。
-
count_distinct - 資料不同的數量。
-
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)
-
這裡傳進一個方法名稱,在分組的時候會進行呼叫這個方法。
state = fields.Selection([('create', '建立'), ('finish', '已完成')], string='狀態', default='create', group_expand="_expand_states") def _expand_states(self, states, domain, order): # 這裡返回需要成組的欄位,如果按state分組就會走到這個方法! return [key for key, val in type(self).state.selection]
-
總結
- 通用屬性在建立欄位的時候是經常會用到的,我們需要靈活的使用它們。
- 還有compute計算屬性,這裡就先不做解釋,後面單獨去講解它。
- 如果有問題請在下方留言討論或者聯絡我W:fandx_