概述:

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