如何使model在某些状态下不能编辑?



  • 现实情况中,经常会遇到在某些情况下业务数据不能编辑的情况,比如订单提交后就不能编辑。

    我当前能想到的解决方法是,覆盖model的wirte方法,在保存的时候做逻辑判断处理,不符合的raise Error。
    虽然能达到目的,这种方法的效果并不理想,理想的效果应该是对那些不符合条件的model记录直接不显示edit按钮,用户不能进入编辑状态。
    想到过在fields_view_get里做处理,根据model的字段值座逻辑判断,然后修改返回的xml,将form的edit属性改为false。
    实践之后发现由于浏览器会先请求fields_view_get,之后才获取model数据,所以fields_view_get里根本无法得到model的记录id。所以这个方法行不通。

    请问解决这类问题,常用的做法是怎么样的?



  • 现实情况中,经常会遇到在某些情况下业务数据不能编辑的情况,比如订单提交后就不能编辑。

    我当前能想到的解决方法是,覆盖model的wirte方法,在保存的时候做逻辑判断处理,不符合的raise Error。
    虽然能达到目的,这种方法的效果并不理想,理想的效果应该是对那些不符合条件的model记录直接不显示edit按钮,用户不能进入编辑状态。
    想到过在fields_view_get里做处理,根据model的字段值座逻辑判断,然后修改返回的xml,将form的edit属性改为false。
    实践之后发现由于浏览器会先请求fields_view_get,之后才获取model数据,所以fields_view_get里根本无法得到model的记录id。所以这个方法行不通。

    请问解决这类问题,常用的做法是怎么样的?


  • 管理员

    字段定义上的states参数就是派这个用处的。比如说下面这段代码:

          [font=Verdana][/font][code]

      'name': fields.char('Order Reference', required=True, copy=False,
                readonly=True, states={'draft': [('readonly', False)], 'sent': [('readonly', False)]}, select=True),
    [/code][font=Verdana][size=78%]
    表示订单的编码(Order reference)除了在‘draft'和’sent‘状态下是可编辑的,在其他状态下都是不可编辑的(read only)[/size][/font]



  • [quote author=digitalsatori link=topic=17491.msg31789#msg31789 date=1453381272]
    字段定义上的states参数就是派这个用处的。比如说下面这段代码:

          [font=Verdana][/font][code]

      'name': fields.char('Order Reference', required=True, copy=False,
                readonly=True, states={'draft': [('readonly', False)], 'sent': [('readonly', False)]}, select=True),
    [/code][font=Verdana][size=78%]
    表示订单的编码(Order reference)除了在‘draft'和’sent‘状态下是可编辑的,在其他状态下都是不可编辑的(read only)[/size][/font]
    [/quote]

    感谢回复。
    不过个人觉得这种方式对我说的情况并不适合,原因有二:
    1. 由于需求是整条记录(form)都不能编辑,所以如果根据字段去设置的话,model的每个字段都要设置成readonly,然后设置states属性。即使真的这么全设置了,出来的效果是用户可以点击“编辑”,然后出来一个没有一个字段可以编辑的表单,真的很奇怪。
    2. 这种方法只能根据state字段来判断字段是否可编辑,不能根据别的字段的值去做判断。

    如果没有简单的办法将"编辑"按钮隐藏或disable掉,能不能在点击“编辑”按钮之后做判断,如果不符合条件不让其进入编辑状态呢?


  • 管理员

    通过Record Rule 来定义 读/写规则



  • [quote author=Joshua link=topic=17491.msg31796#msg31796 date=1453428560]
    通过Record Rule 来定义 读/写规则
    [/quote]

    是的,这是其中一种解决方法:能根据条件控制用户不能修改数据,但是界面效果并不好。
    用户还是可以点击“编辑”,只是在保存的时候提示没有权限。


登录后回复
 

与 Odoo 中文社区 的连接断开,我们正在尝试重连,请耐心等待