ODOO13 當XML中的 context 的默認值遇到 readonly

如果我們想要通過一個動作、其他視圖中的關聯字段或者一個按鈕,打開一個視圖,併爲此視圖中的某個字段傳遞一個默認的值,我們通常會使用 context 屬性,就像下面這樣,爲 purchase_requisition 字段賦默認值爲 tenders,並在目標視圖中,增加這個字段,以接收默認值:

<!-- 傳遞參數 -->
context="{'default_purchase_requisition': 'tenders'}" />
<!-- 接收默認參數 -->
<field name="purchase_requisition" />

本人遇見問題,是在拓展res.partner模型的時候,我爲此模型增加了新的字段:客戶類型(customer_type),是個Selection字段,含連個選項:公司和公司聯繫人。並根據這兩的值作爲過濾項,分別創建了視圖,爲form視圖創建傳遞了默認值。

<!-- 公司 -->
<field name="domain">[('customer_type', '=', 'company')]</field>
<field name="context">{'default_customer_type': 'company'}</field>
<!-- 員工 -->
<field name="domain">[('customer_type', '=', 'employee')]</field>
<field name="context">{'default_customer_type': 'employee'}</field>

 另外還在res.partner模型中,增加了兩個字段,company_id 和 employee_ids , 前者是給 customer_type 爲 employee 使用的,指定他是哪個公司的,後者是給 customer_type 爲 company 使用的,列出公司下的員工。因此在兩個視圖中添加代碼如下:

員工客戶視圖中簡單,只增加了 customer_type 字段,並設成了 readonly :

<field name="customer_type" readonly="1"/>

公司客戶視圖中增加了一個tree,tree 下還列出了三個字段,

<field name="customer_type" readonly="1"/>

<field name="member_ids" 
    context="{'form_view_ref': 'xxxx.view_company_add_employee_form','default_customer_type': 'employee','default_family_id':active_id}">
    <tree>
        <field name="name"/>
        <field name="customer_type"/>
        <field name="note"/>
    </tree>
</field>

爲了能使在tree 中增加新的員工客戶,還寫了一個專門的視圖 view_company_add_employee_form:

<field name="customer_type" readonly="1"/>
<field name="name"/>
....

這時候,問題就真的來了,我在通過 tree 創建員工客戶時,打開的 view_company_add_employee_form 彈出框中,顯示customer_type 是默認值 employee,這時候,沒毛病。填寫好信息,點擊彈出框保存按鈕後,在tree 中看到的customer_type 也是 employee,這時候,也沒毛病。但當我保存 公司客戶後,添加的員工客戶 的customer_type 全變成了 company。這是個什麼熊毛病?

先捋一捋上面的流程,我打開了創建公司客戶的視圖,這時候默認 customer_type 的默認值是 company,顯示的也確實是company;然後我又通過公司客戶中的 tree 打開了添加員工客戶的form視圖,這時候的 customer_type 的默認值是 employee,顯示的確實是 employee,保存員工客戶後,tree上顯示的也是employee;最後保存公司客戶後,公司客戶下面 的tree 裏的員工 客戶的類型,竟變成了 company 。爲啥?

我將create 方法中的創建參數進行了打印,發現沒有 customer_type 鍵值對:

{
    'employee_ids': [
        [4, 41, False], 
        [4, 34, False], 
        [0, 'virtual_176', {'company_id': 64, 'name': 'wwww'}]
    ]
}

思來想去,又扒了扒源代碼,確定是 readonly 搞的鬼,一般情況下,readonly 標記的字段不會出現在創建(或編輯)參數中。視圖中雖顯示爲employee,但其實customer_type 是沒有值的。保存時,不能捕獲到顯示值 employee。既然沒有出現在參數中,爲什麼卻又變成了company ?因爲最後保存公司客戶的時候,在這裏有個默認的參數鍵值對customer_type = company 。

知道是readonly 的問題,我將 readonly 改成了 invisible 。 如果兄弟們就是想看到這個類型,只需要在view_company_add_employee_form  上的字段段上增加屬性:

<field name="customer_type" readonly="1" force_save="1"/>

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章