1
0
mirror of https://github.com/django/django.git synced 2025-10-31 09:41:08 +00:00

Fixed #33916 -- Added support for serialization of enum.Flag in migrations.

This commit is contained in:
Willem Van Onsem
2022-08-11 18:17:19 +02:00
committed by Mariusz Felisiak
parent b30c0081d4
commit 16fffc829c
4 changed files with 29 additions and 4 deletions

View File

@@ -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},
)