@@ -16,6 +16,9 @@ def __init__(self, default=None, required=False):
16
16
self .name = None
17
17
self .storage_name = None
18
18
19
+ self .setter_fn = None
20
+ self .getter_fn = None
21
+
19
22
self .model_cls = None
20
23
21
24
self .default = default
@@ -60,7 +63,11 @@ def get_value(self, model, default=None):
60
63
if default is not None :
61
64
default = self ._converter (default )
62
65
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
+
64
71
return value if value is not None else default
65
72
66
73
def set_value (self , model , value ):
@@ -75,7 +82,10 @@ def set_value(self, model, value):
75
82
if value is not None :
76
83
value = self ._converter (value )
77
84
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 )
79
89
80
90
def get_builtin_type (self , model ):
81
91
"""Return built-in type representation of Field.
@@ -85,6 +95,14 @@ def get_builtin_type(self, model):
85
95
"""
86
96
return self .get_value (model )
87
97
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
+
88
106
def _converter (self , value ):
89
107
"""Convert raw input value of the field.
90
108
0 commit comments