Initial commit from ZIP
This commit is contained in:
commit
378d4692a9
454 files changed
+40367
No files matched your search
Executable
+29
@@ -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)
|
||||
Reference in new issue
Block a user