summaryrefslogtreecommitdiff
path: root/django
diff options
context:
space:
mode:
authorWillem Van Onsem <vanonsem.willem@gmail.com>2022-08-11 18:17:19 +0200
committerMariusz Felisiak <felisiak.mariusz@gmail.com>2022-08-25 06:43:48 +0200
commit16fffc829cbcb231b7276d7e1d0bb836a515873b (patch)
treec8c2957cfd059025c2802aa33b8580370ba59195 /django
parentb30c0081d4d8a31ab7dc7f72a4c7099af606ef29 (diff)
Fixed #33916 -- Added support for serialization of enum.Flag in migrations.
Diffstat (limited to 'django')
-rw-r--r--django/db/migrations/serializer.py17
1 files changed, 15 insertions, 2 deletions
diff --git a/django/db/migrations/serializer.py b/django/db/migrations/serializer.py
index 38da1e6ecc..7ebc966f40 100644
--- a/django/db/migrations/serializer.py
+++ b/django/db/migrations/serializer.py
@@ -16,7 +16,7 @@ from django.db import models
from django.db.migrations.operations.base import Operation
from django.db.migrations.utils import COMPILED_REGEX_TYPE, RegexObject
from django.utils.functional import LazyObject, Promise
-from django.utils.version import get_docs_version
+from django.utils.version import PY311, get_docs_version
class BaseSerializer:
@@ -125,8 +125,21 @@ class EnumSerializer(BaseSerializer):
def serialize(self):
enum_class = self.value.__class__
module = enum_class.__module__
+ if issubclass(enum_class, enum.Flag):
+ if PY311:
+ members = list(self.value)
+ else:
+ members, _ = enum._decompose(enum_class, self.value)
+ members = reversed(members)
+ else:
+ members = (self.value,)
return (
- "%s.%s[%r]" % (module, enum_class.__qualname__, self.value.name),
+ " | ".join(
+ [
+ f"{module}.{enum_class.__qualname__}[{item.name!r}]"
+ for item in members
+ ]
+ ),
{"import %s" % module},
)