@@ -46,15 +46,44 @@ def test_flag_choices_admin_form(self):
4646 )
4747
4848 def test_flag_choices_model_form (self ):
49+ from django .forms .models import fields_for_model
50+ from django_enum .forms import EnumChoiceField , EnumFlagField
4951 from tests .examples .models .flag import Permissions
50- from tests .enum_prop .enums import GNSSConstellation
52+ from tests .enum_prop .enums import (
53+ GNSSConstellation ,
54+ LargeBitField ,
55+ LargeNegativeField ,
56+ )
5157
5258 class FlagChoicesModelForm (ModelForm ):
53- class Meta (EnumTesterForm .Meta ):
59+ class Meta :
60+ fields = "__all__"
5461 model = BitFieldModel
5562
63+ fields = fields_for_model (BitFieldModel )
64+
65+ self .assertEqual (len (fields ), 5 )
66+
67+ expected_types = {
68+ "bit_field_small" : EnumFlagField ,
69+ "bit_field_large" : EnumFlagField ,
70+ "bit_field_large_empty_default" : EnumFlagField ,
71+ "large_neg" : EnumChoiceField ,
72+ "no_default" : EnumFlagField ,
73+ }
74+
75+ for field , inst in fields .items ():
76+ self .assertIsInstance (inst , expected_types [field ])
77+
5678 form = FlagChoicesModelForm (
57- data = {"bit_field_small" : [GNSSConstellation .GPS , GNSSConstellation .GLONASS ]}
79+ data = {
80+ "bit_field_small" : [
81+ GNSSConstellation .GPS .value ,
82+ GNSSConstellation .GLONASS ,
83+ ],
84+ "large_neg" : LargeNegativeField .NEG_ONE .value ,
85+ "no_default" : LargeBitField .TWO ,
86+ }
5887 )
5988
6089 form .full_clean ()
@@ -63,6 +92,21 @@ class Meta(EnumTesterForm.Meta):
6392 form .cleaned_data ["bit_field_small" ],
6493 GNSSConstellation .GPS | GNSSConstellation .GLONASS ,
6594 )
95+ self .assertIsInstance (form .cleaned_data ["bit_field_small" ], GNSSConstellation )
96+ self .assertEqual (
97+ form .cleaned_data ["large_neg" ],
98+ LargeNegativeField .NEG_ONE ,
99+ )
100+ self .assertIsInstance (form .cleaned_data ["large_neg" ], LargeNegativeField )
101+ self .assertEqual (form .cleaned_data ["no_default" ], LargeBitField .TWO )
102+ self .assertIsInstance (form .cleaned_data ["no_default" ], LargeBitField )
103+ self .assertEqual (form .cleaned_data ["bit_field_large" ], None )
104+ self .assertEqual (
105+ form .cleaned_data ["bit_field_large_empty_default" ], LargeBitField (0 )
106+ )
107+ self .assertIsInstance (
108+ form .cleaned_data ["bit_field_large_empty_default" ], LargeBitField
109+ )
66110 self .assertIsInstance (form .base_fields ["bit_field_small" ], EnumFlagField )
67111
68112 def test_extern_flag_admin_form (self ):
0 commit comments