fields.Model se adiciona __default_set__ para remplaza comportamiento de asignacion directa
FossilOrigin-Name: 436c5483cf534c8d457fb403302e511e7aad4b220d66569612f7ceb2da8d8cf8
This commit is contained in:
parent
a015a9361b
commit
58e7387292
@ -31,6 +31,12 @@ class ModelBase(object, metaclass=ModelMeta):
|
||||
def __before_xml__(self):
|
||||
pass
|
||||
|
||||
def __default_set__(self, value):
|
||||
return str(value)
|
||||
|
||||
def _set_content(self, value):
|
||||
self._text = str(self.__default_set__(value))
|
||||
|
||||
def _hook_before_xml(self):
|
||||
self.__before_xml__()
|
||||
for field in self._fields.values():
|
||||
|
@ -29,7 +29,7 @@ class Many2One(Field):
|
||||
if callable(setter):
|
||||
setter(inst_model, value)
|
||||
else:
|
||||
inst_model._text = str(value)
|
||||
inst_model._set_content(value)
|
||||
|
||||
|
||||
|
||||
|
@ -14,7 +14,7 @@ class Model(Field):
|
||||
|
||||
def __set__(self, inst, value):
|
||||
obj = self._create_model(inst)
|
||||
obj._text = str(value)
|
||||
obj._set_content(value)
|
||||
|
||||
def _create_model(self, inst):
|
||||
try:
|
||||
|
@ -272,3 +272,19 @@ def test_field_function_only_setter():
|
||||
person.password = 'calculate'
|
||||
assert '<Person hash="calculate+2"/>' == person.to_xml()
|
||||
|
||||
|
||||
def test_model_set_default_setter():
|
||||
class Hash(facho.model.Model):
|
||||
__name__ = 'Hash'
|
||||
|
||||
def __default_set__(self, value):
|
||||
return "%s+3" % (value)
|
||||
|
||||
class Person(facho.model.Model):
|
||||
__name__ = 'Person'
|
||||
|
||||
hash = fields.Many2One(Hash)
|
||||
|
||||
person = Person()
|
||||
person.hash = 'hola'
|
||||
assert '<Person><Hash>hola+3</Hash></Person>' == person.to_xml()
|
||||
|
Loading…
Reference in New Issue
Block a user