diff --git a/facho/model/__init__.py b/facho/model/__init__.py index fe8cc66..13d7c13 100644 --- a/facho/model/__init__.py +++ b/facho/model/__init__.py @@ -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(): diff --git a/facho/model/fields/many2one.py b/facho/model/fields/many2one.py index 7f5e35f..4b5caaa 100644 --- a/facho/model/fields/many2one.py +++ b/facho/model/fields/many2one.py @@ -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) diff --git a/facho/model/fields/model.py b/facho/model/fields/model.py index 073504d..9653f5a 100644 --- a/facho/model/fields/model.py +++ b/facho/model/fields/model.py @@ -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: diff --git a/tests/test_model.py b/tests/test_model.py index cfcd65c..4b1011b 100644 --- a/tests/test_model.py +++ b/tests/test_model.py @@ -272,3 +272,19 @@ def test_field_function_only_setter(): person.password = 'calculate' assert '' == 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 'hola+3' == person.to_xml()