@@ -155,6 +155,39 @@ def flatten_choices_dict(choices):
155
155
return ret
156
156
157
157
158
+ def iter_options (grouped_choices ):
159
+ """
160
+ Helper function for options and option groups in templates.
161
+ """
162
+ class StartOptionGroup (object ):
163
+ start_option_group = True
164
+ end_option_group = False
165
+
166
+ def __init__ (self , label ):
167
+ self .label = label
168
+
169
+ class EndOptionGroup (object ):
170
+ start_option_group = False
171
+ end_option_group = True
172
+
173
+ class Option (object ):
174
+ start_option_group = False
175
+ end_option_group = False
176
+
177
+ def __init__ (self , value , display_text ):
178
+ self .value = value
179
+ self .display_text = display_text
180
+
181
+ for key , value in grouped_choices .items ():
182
+ if isinstance (value , dict ):
183
+ yield StartOptionGroup (label = key )
184
+ for sub_key , sub_value in value .items ():
185
+ yield Option (value = sub_key , display_text = sub_value )
186
+ yield EndOptionGroup ()
187
+ else :
188
+ yield Option (value = key , display_text = value )
189
+
190
+
158
191
class CreateOnlyDefault (object ):
159
192
"""
160
193
This class may be used to provide default values that are only used
@@ -1190,33 +1223,7 @@ def iter_options(self):
1190
1223
"""
1191
1224
Helper method for use with templates rendering select widgets.
1192
1225
"""
1193
- class StartOptionGroup (object ):
1194
- start_option_group = True
1195
- end_option_group = False
1196
-
1197
- def __init__ (self , label ):
1198
- self .label = label
1199
-
1200
- class EndOptionGroup (object ):
1201
- start_option_group = False
1202
- end_option_group = True
1203
-
1204
- class Option (object ):
1205
- start_option_group = False
1206
- end_option_group = False
1207
-
1208
- def __init__ (self , value , display_text ):
1209
- self .value = value
1210
- self .display_text = display_text
1211
-
1212
- for key , value in self .grouped_choices .items ():
1213
- if isinstance (value , dict ):
1214
- yield StartOptionGroup (label = key )
1215
- for sub_key , sub_value in value .items ():
1216
- yield Option (value = sub_key , display_text = sub_value )
1217
- yield EndOptionGroup ()
1218
- else :
1219
- yield Option (value = key , display_text = value )
1226
+ return iter_options (self .grouped_choices )
1220
1227
1221
1228
1222
1229
class MultipleChoiceField (ChoiceField ):
0 commit comments