概述:

      这是来自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初学者一个提醒,多从官方模块中学习!