Don't let default value override existing value

issue3782
review4581002
This commit is contained in:
Cédric Krier committed 2014-03-24 15:47:06 +01:00
1 parent 3d860cf7d0
commit 3717e084d8
2 files changed
+26 -23

No files matched your search

+25 -22
View File
@@ -24,15 +24,11 @@ class Field(object):
set: save the value from the server
set_client: save the value from the widget
'''
_default = None
def __new__(cls, ctype):
klass = TYPES.get(ctype, CharField)
return klass
class CharField(object):
_default = ''
@staticmethod
def get_field(ctype):
return TYPES.get(ctype, CharField)
def __init__(self, attrs):
self.attrs = attrs
@@ -129,7 +125,7 @@ class CharField(object):
record.value[self.name] = value
def get(self, record):
return record.value.get(self.name) or self._default
return record.value.get(self.name, self._default)
def get_eval(self, record):
return self.get(record)
@@ -152,7 +148,7 @@ class CharField(object):
record.signal('record-changed')
def get_client(self, record):
return record.value.get(self.name) or self._default
return self.get(record)
def set_default(self, record, value):
self.set(record, value)
@@ -186,7 +182,14 @@ class CharField(object):
return {}
class SelectionField(CharField):
class CharField(Field):
_default = ''
def get(self, record):
return super(CharField, self).get(record) or self._default
class SelectionField(Field):
_default = None
@@ -194,7 +197,7 @@ class SelectionField(CharField):
return record.value.get(self.name)
class DateTimeField(CharField):
class DateTimeField(Field):
_default = None
@@ -221,7 +224,7 @@ class DateTimeField(CharField):
return record.expr_eval(self.attrs['format'])
class DateField(CharField):
class DateField(Field):
_default = None
@@ -242,7 +245,7 @@ class DateField(CharField):
return ''
class TimeField(CharField):
class TimeField(Field):
_default = None
@@ -266,7 +269,7 @@ class TimeField(CharField):
return record.expr_eval(self.attrs['format'])
class FloatField(CharField):
class FloatField(Field):
_default = None
default_digits = (16, 2)
@@ -346,7 +349,7 @@ class IntegerField(FloatField):
return super(IntegerField, self).get_client(record, factor=int(factor))
class BooleanField(CharField):
class BooleanField(Field):
_default = False
@@ -362,7 +365,7 @@ class BooleanField(CharField):
return bool(record.value.get(self.name))
class M2OField(CharField):
class M2OField(Field):
'''
internal = (id, name)
'''
@@ -451,7 +454,7 @@ class O2OField(M2OField):
pass
class O2MField(CharField):
class O2MField(Field):
'''
internal = Group of the related objects
'''
@@ -755,7 +758,7 @@ class M2MField(O2MField):
return self.get_eval(record)
class ReferenceField(CharField):
class ReferenceField(Field):
_default = None
@@ -834,12 +837,12 @@ class ReferenceField(CharField):
record.value[self.name + '.rec_name'] = rec_name
class BinaryField(CharField):
class BinaryField(Field):
_default = None
def get(self, record):
result = record.value.get(self.name) or self._default
result = record.value.get(self.name, self._default)
if isinstance(result, basestring):
try:
with open(result, 'rb') as fp:
@@ -887,7 +890,7 @@ class BinaryField(CharField):
return self.get(record)
class DictField(CharField):
class DictField(Field):
_default = {}
+1 -1
View File
@@ -150,7 +150,7 @@ class Group(SignalEvent, list):
def load_fields(self, fields):
for name, attr in fields.iteritems():
field = Field(attr['type'])
field = Field.get_field(attr['type'])
attr['name'] = name
self.fields[name] = field(attr)
if isinstance(self.fields[name], O2MField) \