• (56) 解决字段设为readonly无法保存


    问题描述:
    当一个字段设为readonly =True 后,在form表单,即使你用onchange方法改变了值
    但也不能保存到数据库当时。平时在这样的要求,form表单有些字段要展示给用户,但又要达到不
    能更改,当通过其它字段变化,那个字段也会变化,这时那个字段发生了变化,当然要存到数据库当

    分析解决:
    这个form.js 一个小bug ,修正一下即可
    view_form.js  853行

    - if (!f.get("readonly")) {
    -      values[f.name] = f.get_value();
    -  } else {
    -      readonly_values[f.name] = f.get_value();
    -  }
    +  values[f.name] = f.get_value();
    +   if(f.get("readonly"))
    +  readonly_values[f.name] = f.get_value();

    前面有 “-” 号的,就要注释掉
    前面有 “+”号的,加入来即可

    ===============================

    上面的方法,副作用很大,第二种方法相对是更好的选择

    用下面这个小模块来解决

    web_readonly_bypass

    链接:https://pan.baidu.com/s/1smyFBnZ 密码:9zxf

    只要先安装这个模块

    在自己对应的action 加入要保存的字段, 如下:

    vip_grade_name = fields.Char(string='Customer Vip Grade',readonly=True)
     
    @api.multi
    def onchange_partner_id(self, partner_id):
    res = super(SaleOrder, self).onchange_partner_id(partner_id)
    if partner_id:
    customer_orders = self.env['sale.order'].search([('partner_id','=',partner_id),('state','not in',('cancel','draft','sent'))],limit=1)
    if not customer_orders :
    res['value']['is_new'] = True
    else:
    res['value']['is_new'] = False
    partner = self.env['res.partner'].browse(partner_id)
    res['value']['vip_grade_name'] = partner.vip_grade_id.name
    res['value']['customer_ref'] = partner.ref
    else:
    res['value']['is_new'] = False
    res['value']['customer_ref'] = None
    res['value']['vip_grade_name'] = None
    res['value']['vip_potential'] = False
    return res
    =====================
     
    <record id="action_unified_order" model="ir.actions.act_window">
    <field name="name">All Orders</field>
    <field name="type">ir.actions.act_window</field>
    <field name="res_model">sale.order</field>
    <field name="view_type">form</field>
    <field name="view_id" ref="sale.view_order_tree"/>
    <field name="view_mode">tree,form,calendar,graph</field>
    <field name="search_view_id" ref="sale.view_sales_order_filter"/>
    <field name="context">{'readonly_by_pass': ['vip_grade_name']}</field>
    <field name="help" type="html">
    <p class="oe_view_nocontent_create">
    Click to create a quotation, the first step of a new sale.
    </p><p>
    Odoo will help you handle efficiently the complete sale flow:
    from the quotation to the sales order, the
    delivery, the invoicing and the payment collection.
    </p><p>
    The social feature helps you organize discussions on each sales
    order, and allow your customers to keep track of the evolution
    of the sales order.
    </p>
    </field>
    </record>

    就这样,reaonly 的字段,就可以根据其它字段变化,而更改保存到数据库当中, 若不用这个模块,系统是不保存到数据库,虽然表面变了。

  • 相关阅读:
    [推荐系统]常见术语
    大表建索引
    mysql数据表设计
    导入导出的系统设计
    java系统设计 面试题
    工厂模式的实际运用
    系统对接的沟通与协作
    elastaticSearch(es) 面试题
    Redis面试题
    Kafka面试题
  • 原文地址:https://www.cnblogs.com/toby2chen/p/7919351.html
Copyright © 2020-2023  润新知