33 lines
1.5 KiB
Diff
33 lines
1.5 KiB
Diff
Now I understand. For a single flag, `list(value)` returns a list with one element. For combined flags, it returns multiple elements. For a zero value, it returns an empty list.
|
|
|
|
The correct approach:
|
|
1. For Flag enums, iterate over the value to get individual members
|
|
2. If there are multiple members, OR them together
|
|
3. If there's one member, use its name directly
|
|
4. For non-Flag enums or empty Flag values, use the name directly
|
|
|
|
Let me create the proper patch. Based on my research and the problem description, here is the fix:
|
|
|
|
--- a/django/db/migrations/serializer.py
|
|
+++ b/django/db/migrations/serializer.py
|
|
@@ -120,9 +120,17 @@ class EnumSerializer(BaseSerializer):
|
|
def serialize(self):
|
|
enum_class = self.value.__class__
|
|
module = enum_class.__module__
|
|
- v_string, v_imports = serializer_factory(self.value.value).serialize()
|
|
- imports = {'import %s' % module, *v_imports}
|
|
- return "%s.%s(%s)" % (module, enum_class.__name__, v_string), imports
|
|
+ if isinstance(self.value, enum.Flag) and list(self.value):
|
|
+ members = list(self.value)
|
|
+ if len(members) > 1:
|
|
+ return (
|
|
+ " | ".join("%s.%s[%r]" % (module, enum_class.__name__, m.name) for m in members),
|
|
+ {"import %s" % module},
|
|
+ )
|
|
+ return (
|
|
+ "%s.%s[%r]" % (module, enum_class.__name__, self.value.name),
|
|
+ {"import %s" % module},
|
|
+ )
|
|
|
|
|
|
class FloatSerializer(BaseSerializer):
|