跳转至内容
  • 版块
  • 标签
  • 热门
  • 用户
  • 群组
皮肤
  • Light
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • 默认(Flatly)
  • 不使用皮肤
折叠

Odoo 中文社区

  1. 主页
  2. 版块
  3. Odoo 新手求助
  4. 如何使model在某些状态下不能编辑?

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

已定时 已固定 已锁定 已移动 Odoo 新手求助
6 帖子 3 发布者 3.9k 浏览
  • 从旧到新
  • 从新到旧
  • 最多赞同
登录后回复
此主题已被删除。只有拥有主题管理权限的用户可以查看。
  • I 离线
    I 离线
    iooop
    写于 最后由 编辑
    #1

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

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

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

    1 条回复 最后回复
    0
    • digitalsatoriD 离线
      digitalsatoriD 离线
      digitalsatori 管理员
      写于 最后由 编辑
      #2

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

            [font=Verdana][/font]

      <br /><br />&nbsp; &#039;name&#039;: fields.char(&#039;Order Reference&#039;, required=True, copy=False,<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; readonly=True, states={&#039;draft&#039;: [(&#039;readonly&#039;, False)], &#039;sent&#039;: [(&#039;readonly&#039;, False)]}, select=True),<br />
      

      [font=Verdana][size=78%]
      表示订单的编码(Order reference)除了在‘draft'和’sent‘状态下是可编辑的,在其他状态下都是不可编辑的(read only)[/size][/font]

      【上海先安科技】(tony AT openerp.cn)

      1 条回复 最后回复
      0
      • I 离线
        I 离线
        iooop
        写于 最后由 编辑
        #3

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

              [font=Verdana][/font]

        <br /><br />&nbsp; &#039;name&#039;: fields.char(&#039;Order Reference&#039;, required=True, copy=False,<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; readonly=True, states={&#039;draft&#039;: [(&#039;readonly&#039;, False)], &#039;sent&#039;: [(&#039;readonly&#039;, False)]}, select=True),<br />
        

        [font=Verdana][size=78%]
        表示订单的编码(Order reference)除了在‘draft'和’sent‘状态下是可编辑的,在其他状态下都是不可编辑的(read only)[/size][/font]
        [/quote]

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

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

        1 条回复 最后回复
        0
        • JoshuaJ 离线
          JoshuaJ 离线
          Joshua 管理员
          写于 最后由 编辑
          #4

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

          【上海先安科技】(joshua AT openerp.cn),欢迎关注公众号:openerp_cn

          1 条回复 最后回复
          0
          • I 离线
            I 离线
            iooop
            写于 最后由 编辑
            #5

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

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

            1 条回复 最后回复
            0

            • 登录

            • 没有帐号? 注册

            • 登录或注册以进行搜索。
            • 第一个帖子
              最后一个帖子
            0
            • 版块
            • 标签
            • 热门
            • 用户
            • 群组