Skip to content

Commit d92b8c4

Browse files
committed
fix: editing of FlagField via EnumFlagField form field
When attempting to edit an EnumFlagField through a model form (e.g. in django admin), the form would always be invalid on submit with an invalid_choice error. This was due to the form attempting to set the model field to a list of enum members (rather than bitwise-OR'ing the flags together). This change handles this case by overriding FlagField._coerce_to_value_type and performing the appropriate bitwise OR there.
1 parent 0c5b9e1 commit d92b8c4

File tree

1 file changed

+9
-0
lines changed

1 file changed

+9
-0
lines changed

src/django_enum/fields.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1215,6 +1215,15 @@ def contribute_to_class(
12151215
# for non flag fields
12161216
IntegerField.contribute_to_class(self, cls, name, private_only=private_only)
12171217

1218+
def _coerce_to_value_type(self, value: Any) -> Any:
1219+
if (
1220+
isinstance(value, list)
1221+
or isinstance(value, tuple)
1222+
or isinstance(value, set)
1223+
):
1224+
value = reduce(or_, value)
1225+
return super()._coerce_to_value_type(value)
1226+
12181227

12191228
class SmallIntegerFlagField(FlagField, EnumPositiveSmallIntegerField):
12201229
"""

0 commit comments

Comments
 (0)