Initial commit from ZIP

This commit is contained in:
kusz committed 2024-11-27 13:18:16 +01:00
commit 378d4692a9
454 files changed
+40367

No files matched your search

+29
View File
@@ -0,0 +1,29 @@
from django import forms
from django.core.exceptions import ValidationError
class EnumChoiceField(forms.ChoiceField):
def __init__(self, enum, **kwargs):
kwargs.setdefault("choices", [(item, item.value) for item in enum])
super().__init__(**kwargs)
self.enum = enum
def prepare_value(self, value):
if isinstance(value, self.enum):
return str(value)
return value
def to_python(self, value):
value = super().to_python(value)
if not isinstance(value, self.enum):
try:
enum_name, enum_value = value.split(".", 1)
if enum_name == self.enum.__name__:
value = self.enum[enum_value]
except ValueError:
raise ValidationError(self.error_messages["invalid"], code="invalid")
return value
def clean(self, value):
value = super().clean(value)
return self.enum(value)