Skip to content

Commit 36068a6

Browse files
committed
fixes #44
1 parent b5cff6e commit 36068a6

File tree

1 file changed

+26
-20
lines changed

1 file changed

+26
-20
lines changed

django_enum/fields.py

Lines changed: 26 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -220,10 +220,14 @@ def get_prep_value(self, value: Any) -> Any:
220220
221221
See get_prep_value_
222222
"""
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
227231
return super().get_prep_value(value)
228232

229233
def get_db_prep_value(self, value, connection, prepared=False):
@@ -233,15 +237,15 @@ def get_db_prep_value(self, value, connection, prepared=False):
233237
234238
See get_db_prep_value_
235239
"""
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)
245249

246250
def from_db_value(
247251
self,
@@ -254,9 +258,12 @@ def from_db_value(
254258
255259
See from_db_value_
256260
"""
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
260267

261268
def to_python(self, value: Any) -> Union[Enum, Any]:
262269
"""
@@ -269,12 +276,11 @@ def to_python(self, value: Any) -> Union[Enum, Any]:
269276
:raises ValidationError: If the value is not mappable to a valid
270277
enumeration
271278
"""
272-
if value is None:
273-
return value
274-
275279
try:
276280
return self._try_coerce(value)
277-
except ValueError as err:
281+
except (ValueError, TypeError) as err:
282+
if value is None:
283+
return value
278284
raise ValidationError(
279285
f"'{value}' is not a valid "
280286
f"{self.enum.__name__ if self.enum else ''}."

0 commit comments

Comments
 (0)