You can use 'state' varaible and make your required variable as readonly=True for particular 'state'. and change the state to done in create or write function of your class.
eg: In the following code use your variable instead of client_id
class collection_details(osv.osv):
_name = "collection.details"
_description = "Collection Details"
_columns={
'state': fields.selection([
('draft', 'Draft Sales Order'),
('done', 'Done'),
], 'Status', readonly=True, invisible=True, track_visibility='onchange',
help="", select=True),
'client_id': fields.char('Client Id',size=64,readonly=True,states={'draft': [('readonly', False)]}),
}
_defaults = {
'state': 'draft',
}
Hope this will help you