21
21
ListField as MongoListField , MapField as MongoMapField
22
22
23
23
from .fields import MongoCharField , ReferenceField , DocumentMultipleChoiceField , ListField , MapField
24
- from .widgets import DynamicListWidget
24
+ from .widgets import Html5SplitDateTimeWidget
25
25
from .documentoptions import create_verbose_name
26
26
27
27
BLANK_CHOICE_DASH = [("" , "---------" )]
@@ -142,7 +142,7 @@ def get_field_default(self, field):
142
142
d ['initial' ] = field .default
143
143
return f .default
144
144
145
- def _check_widget (self , map_key ):
145
+ def check_widget (self , map_key ):
146
146
if map_key in self .widget_override_map :
147
147
return {'widget' : self .widget_override_map .get (map_key )}
148
148
else :
@@ -176,7 +176,7 @@ def generate_stringfield(self, field, **kwargs):
176
176
defaults ['regex' ] = field .regex
177
177
178
178
form_class = self .form_field_map .get (map_key )
179
- defaults .update (self ._check_widget (map_key ))
179
+ defaults .update (self .check_widget (map_key ))
180
180
defaults .update (kwargs )
181
181
return form_class (** defaults )
182
182
@@ -190,7 +190,7 @@ def generate_emailfield(self, field, **kwargs):
190
190
'label' : self .get_field_label (field ),
191
191
'help_text' : self .get_field_help_text (field )
192
192
}
193
- defaults .update (self ._check_widget (map_key ))
193
+ defaults .update (self .check_widget (map_key ))
194
194
form_class = self .form_field_map .get (map_key )
195
195
defaults .update (kwargs )
196
196
return form_class (** defaults )
@@ -206,7 +206,7 @@ def generate_urlfield(self, field, **kwargs):
206
206
'help_text' : self .get_field_help_text (field )
207
207
}
208
208
form_class = self .form_field_map .get (map_key )
209
- defaults .update (self ._check_widget (map_key ))
209
+ defaults .update (self .check_widget (map_key ))
210
210
defaults .update (kwargs )
211
211
return form_class (** defaults )
212
212
@@ -231,7 +231,7 @@ def generate_intfield(self, field, **kwargs):
231
231
'max_value' : field .max_value ,
232
232
})
233
233
form_class = self .form_field_map .get (map_key )
234
- defaults .update (self ._check_widget (map_key ))
234
+ defaults .update (self .check_widget (map_key ))
235
235
defaults .update (kwargs )
236
236
return form_class (** defaults )
237
237
@@ -246,7 +246,7 @@ def generate_floatfield(self, field, **kwargs):
246
246
'help_text' : self .get_field_help_text (field )
247
247
}
248
248
form_class = self .form_field_map .get (map_key )
249
- defaults .update (self ._check_widget (map_key ))
249
+ defaults .update (self .check_widget (map_key ))
250
250
defaults .update (kwargs )
251
251
return form_class (** defaults )
252
252
@@ -262,7 +262,7 @@ def generate_decimalfield(self, field, **kwargs):
262
262
'help_text' : self .get_field_help_text (field )
263
263
}
264
264
form_class = self .form_field_map .get (map_key )
265
- defaults .update (self ._check_widget (map_key ))
265
+ defaults .update (self .check_widget (map_key ))
266
266
defaults .update (kwargs )
267
267
return form_class (** defaults )
268
268
@@ -283,7 +283,7 @@ def generate_booleanfield(self, field, **kwargs):
283
283
else :
284
284
map_key = 'booleanfield'
285
285
form_class = self .form_field_map .get (map_key )
286
- defaults .update (self ._check_widget (map_key ))
286
+ defaults .update (self .check_widget (map_key ))
287
287
defaults .update (kwargs )
288
288
return form_class (** defaults )
289
289
@@ -295,7 +295,7 @@ def generate_datetimefield(self, field, **kwargs):
295
295
'label' : self .get_field_label (field ),
296
296
}
297
297
form_class = self .form_field_map .get (map_key )
298
- defaults .update (self ._check_widget (map_key ))
298
+ defaults .update (self .check_widget (map_key ))
299
299
defaults .update (kwargs )
300
300
return form_class (** defaults )
301
301
@@ -308,7 +308,7 @@ def generate_referencefield(self, field, **kwargs):
308
308
'queryset' : field .document_type .objects .clone (),
309
309
}
310
310
form_class = self .form_field_map .get (map_key )
311
- defaults .update (self ._check_widget (map_key ))
311
+ defaults .update (self .check_widget (map_key ))
312
312
defaults .update (kwargs )
313
313
return form_class (** defaults )
314
314
@@ -340,7 +340,7 @@ def generate_listfield(self, field, **kwargs):
340
340
'contained_field' : form_field .__class__ ,
341
341
})
342
342
form_class = self .form_field_map .get (map_key )
343
- defaults .update (self ._check_widget (map_key ))
343
+ defaults .update (self .check_widget (map_key ))
344
344
defaults .update (kwargs )
345
345
return form_class (** defaults )
346
346
@@ -358,7 +358,7 @@ def generate_mapfield(self, field, **kwargs):
358
358
'contained_field' : form_field .__class__ ,
359
359
}
360
360
form_class = self .form_field_map .get (map_key )
361
- defaults .update (self ._check_widget (map_key ))
361
+ defaults .update (self .check_widget (map_key ))
362
362
defaults .update (kwargs )
363
363
return form_class (** defaults )
364
364
@@ -371,7 +371,7 @@ def generate_filefield(self, field, **kwargs):
371
371
'help_text' : self .get_field_help_text (field )
372
372
}
373
373
form_class = self .form_field_map .get (map_key )
374
- defaults .update (self ._check_widget (map_key ))
374
+ defaults .update (self .check_widget (map_key ))
375
375
defaults .update (kwargs )
376
376
return form_class (** defaults )
377
377
@@ -384,7 +384,7 @@ def generate_imagefield(self, field, **kwargs):
384
384
'help_text' : self .get_field_help_text (field )
385
385
}
386
386
form_class = self .form_field_map .get (map_key )
387
- defaults .update (self ._check_widget (map_key ))
387
+ defaults .update (self .check_widget (map_key ))
388
388
defaults .update (kwargs )
389
389
return form_class (** defaults )
390
390
@@ -416,10 +416,38 @@ def generate(self, field, **kwargs):
416
416
417
417
defaults .update (kwargs )
418
418
return forms .CharField (** defaults )
419
-
420
- class DynamicFormFieldGenerator (MongoDefaultFormFieldGenerator ):
421
- widget_override_map = {
422
- 'stringfield_long' : forms .Textarea ,
423
- 'listfield' : DynamicListWidget ,
424
- }
425
-
419
+
420
+ class Html5FormFieldGenerator (MongoDefaultFormFieldGenerator ):
421
+ def check_widget (self , map_key ):
422
+ override = super (Html5FormFieldGenerator , self ).check_widget (map_key )
423
+ if override != {}:
424
+ return override
425
+
426
+ chunks = map_key .split ('field' )
427
+ kind = chunks [0 ]
428
+
429
+ if kind == 'email' :
430
+ if hasattr (forms , 'EmailInput' ):
431
+ return {'widget' : forms .EmailInput }
432
+ else :
433
+ input = forms .TextInput
434
+ input .input_type = 'email'
435
+ return {'widget' : input }
436
+ elif kind in ['int' , 'float' ] and len (chunks ) < 2 :
437
+ if hasattr (forms , 'NumberInput' ):
438
+ return {'widget' : forms .NumberInput }
439
+ else :
440
+ input = forms .TextInput
441
+ input .input_type = 'number'
442
+ return {'widget' : input }
443
+ elif kind == 'url' :
444
+ if hasattr (forms , 'URLInput' ):
445
+ return {'widget' : forms .URLInput }
446
+ else :
447
+ input = forms .TextInput
448
+ input .input_type = 'url'
449
+ return {'widget' : input }
450
+ elif kind == 'datetime' :
451
+ return {'widget' : Html5SplitDateTimeWidget }
452
+ else :
453
+ return {}
0 commit comments