diff --git a/facho/model/fields/function.py b/facho/model/fields/function.py index 34e3195..9ea2ac3 100644 --- a/facho/model/fields/function.py +++ b/facho/model/fields/function.py @@ -2,7 +2,7 @@ from .field import Field from .model import Model class Function(Field): - def __init__(self, getter, setter=None, field=None): + def __init__(self, getter=None, setter=None, field=None): self.field = field self.getter = getter self.setter = setter @@ -12,6 +12,12 @@ class Function(Field): return self assert self.name is not None + if self.getter is None and self.field is None: + return None + + if self.getter is None and self.field is not None: + return Model(self.field) + if self.field is None: return self._call(inst, self.getter, self.name) else: diff --git a/tests/test_model.py b/tests/test_model.py index fa92e9f..cfcd65c 100644 --- a/tests/test_model.py +++ b/tests/test_model.py @@ -257,4 +257,18 @@ def test_field_function_setter(): person = Person() person.password = 'calculate' assert '' == person.to_xml() + +def test_field_function_only_setter(): + class Person(facho.model.Model): + __name__ = 'Person' + + hash = fields.Attribute('hash') + password = fields.Function(setter='set_hash') + + def set_hash(self, name, value): + self.hash = "%s+2" % (value) + + person = Person() + person.password = 'calculate' + assert '' == person.to_xml()