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