【求助】如何实现添加采购明细时,采购员不能修改采购单价?
-
采购员添加采购明细时,一旦选择了产品,相应的价格、计量单位等都由系统自动完成,采购员可以改变数量、单价、单位等。
但现在要求采购人员不能改变单价。我把 price_unit这个field设置成readonly,但price_unit的值是在用户选择产品后,触发product_id_change这个方法才获得的,如果一开始在view里设置成readonly,那price_unit就永远是0,无法获得新值。
在purchase.py源文件里,把price_unit改为'price_unit': fields.float('Unit Price', required=True, digits=(16, int(config['price_accuracy'])),read=['group_purchase_user']) 重启ERP系统后,不论是系统管理员还是采购员,如果打开包括采购明细内容的采购订单就报错,如果采购订单里没有采购订单明细可以正常打开订单。错误信息如下所示:
Traceback (most recent call last):
File "netsvc.pyo", line 245, in dispatch
File "netsvc.pyo", line 74, in call
File "service\web_services.pyo", line 576, in execute
File "osv\osv.pyo", line 58, in wrapper
File "osv\osv.pyo", line 119, in execute
File "osv\osv.pyo", line 111, in execute_cr
File "osv\orm.pyo", line 2225, in read
File "osv\orm.pyo", line 2355, in _read_flat
File "osv\fields.pyo", line 650, in get
File "d:\OpenERP\Server\addons\purchase\purchase.py", line 446, in _amount_line
File "osv\orm.pyo", line 240, in getattr
File "osv\orm.pyo", line 189, in getitem
File "osv\orm.pyo", line 2225, in read
File "osv\orm.pyo", line 2379, in _read_flat
IndexError: list index out of range
如果想实现类似price_unit这样实时计算字段值的只读,换句话说,就是禁止用户自己编辑值。在系统里如何实现? -
这个readonly属性的确令人很迷惑,在官方论坛也有很多类似的问题。
很多人理解readonly是对用户只读的,其实设有readonly属性的字段的数据改变都不会保存到数据库,也就是它是阻止数据更新的。
我们可以用两个方法来实现楼主的要求:
1、使用字段访问权限,就是添加字段级别的访问权限,就是你尝试过的方法,但是也许用的不太正确,应该设定write的访问组,比如:write=['group_purchase_manager']
2. 使用ontown兄提到的方法,就是覆写 'reate', 'write', 方法。