self._free_attrs.append(attr)
setattr(self, attr, getattr(field, attr))
+ # special case for states: copy it only for inherited fields
+ if not self.states and self.inherited:
+ self.states = field.states
+
# special case for required: check if all fields are required
if not self.store and not self.required:
self.required = all(field.required for field in fields)
if env.in_onchange:
for invf in self.inverse_fields:
invf._update(value, record)
- record._dirty = True
+ record._set_dirty(self.name)
# determine more dependent fields, and invalidate them
if self.relational:
return ustr(value)[:self.size]
class Text(_String):
- """ Text field. Very similar to :class:`~.Char` but used for longer
- contents and displayed as a multiline text box
+ """ Very similar to :class:`~.Char` but used for longer contents, does not
+ have a size and usually displayed as a multiline text box.
:param translate: whether the value of this field can be translated
"""
records._cache[self] = value
def convert_to_cache(self, value, record, validate=True):
- if isinstance(value, (NoneType, int)):
+ if isinstance(value, (NoneType, int, long)):
return record.env[self.comodel_name].browse(value)
if isinstance(value, BaseModel):
if value._name == self.comodel_name and len(value) <= 1:
elif isinstance(value, dict):
return record.env[self.comodel_name].new(value)
else:
- return record.env[self.comodel_name].browse(value)
+ return self.null(record.env)
def convert_to_read(self, value, use_name_get=True):
if use_name_get and value:
# add new and existing records
for record in value:
- if not record.id or record._dirty:
- values = dict((k, v) for k, v in record._cache.iteritems() if k in fnames)
+ if not record.id:
+ values = {k: v for k, v in record._cache.iteritems() if k in fnames}
values = record._convert_to_write(values)
- if not record.id:
- result.append((0, 0, values))
- else:
- result.append((1, record.id, values))
+ result.append((0, 0, values))
+ elif record._is_dirty():
+ values = {k: record._cache[k] for k in record._get_dirty() if k in fnames}
+ values = record._convert_to_write(values)
+ result.append((1, record.id, values))
else:
add_existing(record.id)