如果我们想要通过一个动作、其他视图中的关联字段或者一个按钮,打开一个视图,并为此视图中的某个字段传递一个默认的值,我们通常会使用 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"/>