- self._field_get2(cr, uid, obj, context=context)
- if type(ids) != type([]):
- ids=[ids]
- objlst = obj.browse(cr, uid, ids)
- for data in objlst:
- t_id = data.id
- t_data = data
- for i in range(len(self.arg)):
- if not t_data: break
- field_detail = self._relations[i]
- if not t_data[self.arg[i]]:
- if self._type not in ('one2many', 'many2many'):
- t_id = t_data['id']
- t_data = False
- elif field_detail['type'] in ('one2many', 'many2many'):
- if self._type != "many2one":
- t_id = t_data.id
- t_data = t_data[self.arg[i]][0]
- else:
- t_data = False
- else:
- t_id = t_data['id']
- t_data = t_data[self.arg[i]]
- else:
- model = obj.pool.get(self._relations[-1]['object'])
- model.write(cr, uid, [t_id], {args[-1]: values}, context=context)
+ if isinstance(ids, (int, long)):
+ ids = [ids]
+ for record in obj.browse(cr, uid, ids, context=context):
+ # traverse all fields except the last one
+ for field in self.arg[:-1]:
+ record = record[field] or False
+ if not record:
+ break
+ elif isinstance(record, list):
+ # record is the result of a one2many or many2many field
+ record = record[0]
+ if record:
+ # write on the last field
+ record.write({self.arg[-1]: values})