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()