轉載請註明原文地址:http://www.javashuo.com/article/p-mwuqogxu-ch.htmlhtml
field標籤訂義了用於搜索過濾的字段有哪些。python
searchview中的field字段只是說明了能夠用哪些字段來做過濾,而且在搜索框輸入時會自動啓用搜索字段的模糊搜索功能以供候選。sql
可有如下幾種屬性,進一步指定使用某些字段的某些過濾條件進行記錄篩選:dom
<field name="name" filter_domain="['|', '|', ('明確的字段內容', 'ilike', self), ('shortdesc', 'ilike', self), ('name', 'ilike', self)]" string="Theme"/>
過濾器,比filed字段更具體。searchview中的field字段只是說明了能夠用哪些字段來做過濾,而且在搜索框輸入時會自動啓用搜索字段的模糊搜索功能以供候選;而filter則更加具體,它的domain屬性或context屬性,指明瞭具體的字段值過濾條件,符合條件的記錄纔會做爲最終搜索結果顯示出來。ide
filter中的context,是dict類型。
a)傳遞分組依據:
context="{'group_by':'字段'}"
b)爲domain表達式傳遞變量值
context="{'key':value}"
<record id="action_hr_timesheet_attendance_report" model="ir.actions.act_window"> <field name="context">{'search_default_過濾器name': True}</field> </record>
分割線。用於將過濾器按組分開,更好看。函數
分局佈局,用於過濾器比較多的狀況下,分組排放。佈局
搜索字段和過濾條件能夠經過action的context使用search_default_name 配置,對於字段就是須要搜索的值,對過濾器它是一個布爾值:ui
{ 'search_default_foo': 'acro', 'search_default_bar': 1 } #自動激活bar過濾器,並在foo字段搜索acro
1)經過filter的domain屬性。表達式的值:spa
a)能夠是具體的明確值;插件
b)能夠是python運算表達式(不過不能取具體記錄字段值,能夠是python語言自己的一些庫函數調用的運算表達式)。
c)能夠是一個變量名,變量值則經過context來賦予。通常用於制定默認搜索條件,在context中傳遞key:value。
<filter name="" string="" domain="[('字段', '比較運算符', 值[值能夠是具體的明確值;也能夠是python運算表達式(不過不能取具體記錄字段值,能夠是python語言自己的一些庫函數調用的運算表達式)]))]"/>
2)經過action的domain字段:action中的domain表達式,會在跳轉時自動應用
<record id="action_" model="ir.actions.act_window"> <field name="name"></field> <field name="res_model"></field> <field name="domain">[(表達式)]</field> </record>
odoo模型中有個方法:read_group(self, domain, fields, groupby, offset=0, limit=None, orderby=False, lazy=True)
該方法用於讀取搜索視圖上的過濾條件,並使用過濾條件搜索模型記錄。
其中,domain是一個list,裏面是一個個的表達式,由 action中的domain+fiter中的domain+界面上臨時應用的篩選條件 拼接而成。
工做流程爲:
action打開tree視圖——調用模型的read_group()函數,根據domain條件,調用模型的search(domain)進行檢索——把記錄集返回界面上呈現;
每當界面上點擊了 篩選——過濾器 或 篩選——自定義篩選 ,都會調用一次read_group()函數,從新拼接domain列表,並檢索模型數據。【多維分析中也是該邏輯,不過是從sql查詢出來的view做爲數據源,從中篩選數據】
【能夠重寫模型的該方法,自定義記錄的篩選邏輯。】