Don't let default value override existing value
issue3782 review4581002
This commit is contained in:
1 parent
3d860cf7d0
commit
3717e084d8
2 files changed
+26
-23
No files matched your search
@@ -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 = {}
|
||||
|
||||
|
||||
@@ -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) \
|
||||
|
||||
Reference in new issue
Block a user