@@ -16,6 +16,9 @@ def __init__(self, default=None, required=False):
1616 self .name = None
1717 self .storage_name = None
1818
19+ self .setter_fn = None
20+ self .getter_fn = None
21+
1922 self .model_cls = None
2023
2124 self .default = default
@@ -60,7 +63,11 @@ def get_value(self, model, default=None):
6063 if default is not None :
6164 default = self ._converter (default )
6265
63- value = getattr (model , self .storage_name )
66+ if callable (self .getter_fn ):
67+ value = self .getter_fn (model )
68+ else :
69+ value = getattr (model , self .storage_name )
70+
6471 return value if value is not None else default
6572
6673 def set_value (self , model , value ):
@@ -75,7 +82,10 @@ def set_value(self, model, value):
7582 if value is not None :
7683 value = self ._converter (value )
7784
78- setattr (model , self .storage_name , value )
85+ if callable (self .setter_fn ) and value is not None :
86+ self .setter_fn (model , value )
87+ else :
88+ setattr (model , self .storage_name , value )
7989
8090 def get_builtin_type (self , model ):
8191 """Return built-in type representation of Field.
@@ -85,6 +95,14 @@ def get_builtin_type(self, model):
8595 """
8696 return self .get_value (model )
8797
98+ def getter (self , fn ):
99+ """Set function for implementation custom getter feature."""
100+ self .getter_fn = fn
101+
102+ def setter (self , fn ):
103+ """Set function for implementation custom setter feature."""
104+ self .setter_fn = fn
105+
88106 def _converter (self , value ):
89107 """Convert raw input value of the field.
90108
0 commit comments