diff --git a/mongoengine/fields.py b/mongoengine/fields.py index 69277d06..8915d801 100644 --- a/mongoengine/fields.py +++ b/mongoengine/fields.py @@ -1623,7 +1623,9 @@ class BinaryField(BaseField): class EnumField(BaseField): - """Enumeration Field. Values are stored underneath as strings. + """Enumeration Field. Values are stored underneath as is, + so it will only work with simple types (str, int, etc) that + are bson encodable Example usage: .. code-block:: python diff --git a/tests/fields/test_enum_field.py b/tests/fields/test_enum_field.py index 1f89b9bf..384e9afd 100644 --- a/tests/fields/test_enum_field.py +++ b/tests/fields/test_enum_field.py @@ -1,5 +1,6 @@ from enum import Enum +from bson import InvalidDocument import pytest from mongoengine import * @@ -105,3 +106,17 @@ class TestIntEnumField(MongoDBTestCase): with pytest.raises(ValidationError, match="Value must be one of"): ModelWithColor(color="wrong_type").validate() + + +class TestFunkyEnumField(MongoDBTestCase): + def test_enum_incompatible_bson_type_fails_during_save(self): + class FunkyColor(Enum): + YELLOW = object() + + class ModelWithFunkyColor(Document): + color = EnumField(FunkyColor) + + m = ModelWithFunkyColor(color=FunkyColor.YELLOW) + + with pytest.raises(InvalidDocument, match="cannot encode object"): + m.save()