@@ -220,10 +220,14 @@ def get_prep_value(self, value: Any) -> Any:
220
220
221
221
See get_prep_value_
222
222
"""
223
- if value is not None and self .enum is not None :
224
- value = self ._try_coerce (value , force = True )
225
- if isinstance (value , self .enum ):
226
- value = value .value
223
+ if self .enum :
224
+ try :
225
+ value = self ._try_coerce (value , force = True )
226
+ if isinstance (value , self .enum ):
227
+ value = value .value
228
+ except (ValueError , TypeError ):
229
+ if value is not None :
230
+ raise
227
231
return super ().get_prep_value (value )
228
232
229
233
def get_db_prep_value (self , value , connection , prepared = False ):
@@ -233,15 +237,15 @@ def get_db_prep_value(self, value, connection, prepared=False):
233
237
234
238
See get_db_prep_value_
235
239
"""
236
- if value is not None and self .enum is not None :
237
- value = self . _try_coerce ( value , force = True )
238
- if isinstance ( value , self .enum ):
239
- value = value . value
240
- return super (). get_db_prep_value (
241
- value ,
242
- connection ,
243
- prepared
244
- )
240
+ if self .enum :
241
+ try :
242
+ value = self ._try_coerce ( value , force = True )
243
+ if isinstance ( value , self . enum ):
244
+ value = value . value
245
+ except ( ValueError , TypeError ):
246
+ if value is not None :
247
+ raise
248
+ return super (). get_db_prep_value ( value , connection , prepared )
245
249
246
250
def from_db_value (
247
251
self ,
@@ -254,9 +258,12 @@ def from_db_value(
254
258
255
259
See from_db_value_
256
260
"""
257
- if value is None : # pragma: no cover
258
- return value
259
- return self ._try_coerce (value )
261
+ try :
262
+ return self ._try_coerce (value )
263
+ except (ValueError , TypeError ):
264
+ if value is None :
265
+ return value
266
+ raise
260
267
261
268
def to_python (self , value : Any ) -> Union [Enum , Any ]:
262
269
"""
@@ -269,12 +276,11 @@ def to_python(self, value: Any) -> Union[Enum, Any]:
269
276
:raises ValidationError: If the value is not mappable to a valid
270
277
enumeration
271
278
"""
272
- if value is None :
273
- return value
274
-
275
279
try :
276
280
return self ._try_coerce (value )
277
- except ValueError as err :
281
+ except (ValueError , TypeError ) as err :
282
+ if value is None :
283
+ return value
278
284
raise ValidationError (
279
285
f"'{ value } ' is not a valid "
280
286
f"{ self .enum .__name__ if self .enum else '' } ."
0 commit comments