@@ -682,6 +682,10 @@ def raise_errors_on_nested_writes(method_name, serializer, validated_data):
682
682
)
683
683
684
684
685
+ MODEL_SERIALIZER_FIELDS_CACHE = {}
686
+ MODEL_SERIALIZER_VALIDATORS_CACHE = {}
687
+
688
+
685
689
class ModelSerializer (Serializer ):
686
690
"""
687
691
A `ModelSerializer` is just a regular `Serializer`, except that:
@@ -802,6 +806,11 @@ def get_fields(self):
802
806
Return the dict of field names -> field instances that should be
803
807
used for `self.fields` when instantiating the serializer.
804
808
"""
809
+ cls = self .__class__
810
+
811
+ if cls in MODEL_SERIALIZER_FIELDS_CACHE :
812
+ return copy .deepcopy (MODEL_SERIALIZER_FIELDS_CACHE [cls ])
813
+
805
814
declared_fields = copy .deepcopy (self ._declared_fields )
806
815
model = getattr (self .Meta , 'model' )
807
816
depth = getattr (self .Meta , 'depth' , 0 )
@@ -837,6 +846,8 @@ def get_fields(self):
837
846
# Add in any hidden fields.
838
847
ret .update (hidden_fields )
839
848
849
+ MODEL_SERIALIZER_FIELDS_CACHE [cls ] = ret
850
+
840
851
return ret
841
852
842
853
# Methods for determining the set of field names to include...
@@ -1217,12 +1228,21 @@ def get_validators(self):
1217
1228
if validators is not None :
1218
1229
return validators [:]
1219
1230
1231
+ cls = self .__class__
1232
+
1233
+ if cls in MODEL_SERIALIZER_VALIDATORS_CACHE :
1234
+ return MODEL_SERIALIZER_VALIDATORS_CACHE [cls ][:]
1235
+
1220
1236
# Otherwise use the default set of validators.
1221
- return (
1237
+ validators = (
1222
1238
self .get_unique_together_validators () +
1223
1239
self .get_unique_for_date_validators ()
1224
1240
)
1225
1241
1242
+ MODEL_SERIALIZER_VALIDATORS_CACHE [cls ] = validators
1243
+
1244
+ return validators
1245
+
1226
1246
def get_unique_together_validators (self ):
1227
1247
"""
1228
1248
Determine a default set of validators for any unique_together contraints.
0 commit comments