概述:
这是来自stackoverflow的问题,无意中搜索到了,感觉这个问题能够突显openerp开发中常见的设计问题,所以翻译至此。
提问人创建的model有多个字段,但是除了customer id字段,其他的都是readonly。当他填写customer id时,其他的字段也会自动被填充,但是数据库中无法保存除了customer id外的字段。
正文:
当时看到这个问题的时候,感觉自己也极其有可能犯这个错误,哈哈,只是尚未遇到这么奇葩的需求。
我们先不去思考问题在哪,先看答案:
你可以使用state字段来控制其他需要readonly的字段。
不了解openerp的同学看到上面的那句话肯定会感觉莫名其妙,看看代码吧:
1: class collection_details(osv.osv):
2: _name = "collection.details"
3: _description = "Collection Details"
4: _columns={
5: 'state': fields.selection([
6: ('draft', 'Draft Sales Order'),
7: ('done', 'Done'),
8: ], 'Status', readonly=True, invisible=True, track_visibility='onchange',
9: help="", select=True),
10: 'client_id': fields.char('Client Id',size=64,readonly=True,states={ 'draft': [('readonly', False)]}),
11: }
12: _defaults = {
13: 'state': 'draft',
14: }
10行的意思是draft状态时该字段不是只读的,这一下问题解决了。
总结:
答案的写法在很多openerp模块中都可以看到,通过问题与答案的对比给我们openerp初学者一个提醒,多从官方模块中学习!