如何使model在某些状态下不能编辑?
-
现实情况中,经常会遇到在某些情况下业务数据不能编辑的情况,比如订单提交后就不能编辑。
我当前能想到的解决方法是,覆盖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]<br /><br /> 'name': fields.char('Order Reference', required=True, copy=False,<br /> readonly=True, states={'draft': [('readonly', False)], 'sent': [('readonly', False)]}, select=True),<br />
[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]<br /><br /> 'name': fields.char('Order Reference', required=True, copy=False,<br /> readonly=True, states={'draft': [('readonly', False)], 'sent': [('readonly', 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掉,能不能在点击“编辑”按钮之后做判断,如果不符合条件不让其进入编辑状态呢?