From a2eaea8f22305b57dff3ab13add2e2887287bb6f Mon Sep 17 00:00:00 2001 From: "T. Franzel" Date: Sat, 11 Mar 2023 00:34:13 +0100 Subject: Fixed #34388 -- Allowed using choice enumeration types directly on model and form fields. --- django/db/models/fields/__init__.py | 3 +++ django/forms/fields.py | 3 +++ 2 files changed, 6 insertions(+) (limited to 'django') diff --git a/django/db/models/fields/__init__.py b/django/db/models/fields/__init__.py index 060e1be605..ab4c094c1c 100644 --- a/django/db/models/fields/__init__.py +++ b/django/db/models/fields/__init__.py @@ -14,6 +14,7 @@ from django.conf import settings from django.core import checks, exceptions, validators from django.db import connection, connections, router from django.db.models.constants import LOOKUP_SEP +from django.db.models.enums import ChoicesMeta from django.db.models.query_utils import DeferredAttribute, RegisterLookupMixin from django.utils import timezone from django.utils.datastructures import DictWrapper @@ -216,6 +217,8 @@ class Field(RegisterLookupMixin): self.unique_for_date = unique_for_date self.unique_for_month = unique_for_month self.unique_for_year = unique_for_year + if isinstance(choices, ChoicesMeta): + choices = choices.choices if isinstance(choices, collections.abc.Iterator): choices = list(choices) self.choices = choices diff --git a/django/forms/fields.py b/django/forms/fields.py index 46de2f53a0..003fb5ca6b 100644 --- a/django/forms/fields.py +++ b/django/forms/fields.py @@ -16,6 +16,7 @@ from urllib.parse import urlsplit, urlunsplit from django.core import validators from django.core.exceptions import ValidationError +from django.db.models.enums import ChoicesMeta from django.forms.boundfield import BoundField from django.forms.utils import from_current_timezone, to_current_timezone from django.forms.widgets import ( @@ -857,6 +858,8 @@ class ChoiceField(Field): def __init__(self, *, choices=(), **kwargs): super().__init__(**kwargs) + if isinstance(choices, ChoicesMeta): + choices = choices.choices self.choices = choices def __deepcopy__(self, memo): -- cgit v1.2.1