diff options
| author | Willem Van Onsem <vanonsem.willem@gmail.com> | 2022-08-11 18:17:19 +0200 |
|---|---|---|
| committer | Mariusz Felisiak <felisiak.mariusz@gmail.com> | 2022-08-25 06:43:48 +0200 |
| commit | 16fffc829cbcb231b7276d7e1d0bb836a515873b (patch) | |
| tree | c8c2957cfd059025c2802aa33b8580370ba59195 /django | |
| parent | b30c0081d4d8a31ab7dc7f72a4c7099af606ef29 (diff) | |
Fixed #33916 -- Added support for serialization of enum.Flag in migrations.
Diffstat (limited to 'django')
| -rw-r--r-- | django/db/migrations/serializer.py | 17 |
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}, ) |
