Allow proper substitution of widget for dynamic fields.

Signed-off-by: Roberto Rosario <roberto.rosario.gonzalez@gmail.com>
This commit is contained in:
Roberto Rosario
2017-08-07 05:20:58 -04:00
parent 81f481fadf
commit 44f116cf68

View File

@@ -88,6 +88,8 @@ class DynamicFormMixin(object):
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):
self.schema = kwargs.pop('schema') self.schema = kwargs.pop('schema')
super(DynamicFormMixin, self).__init__(*args, **kwargs) super(DynamicFormMixin, self).__init__(*args, **kwargs)
widgets = self.schema.get('widgets', {})
for field in self.schema['fields']: for field in self.schema['fields']:
field_class = import_string(field['class']) field_class = import_string(field['class'])
kwargs = { kwargs = {
@@ -96,14 +98,15 @@ class DynamicFormMixin(object):
'initial': field.get('default', None), 'initial': field.get('default', None),
'help_text': field.get('help_text'), 'help_text': field.get('help_text'),
} }
kwargs.update(field.get('kwargs', {})) if widgets and field['name'] in widgets:
self.fields[field['name']] = field_class(**kwargs) widget = widgets[field['name']]
kwargs['widget'] = import_string(
for field, widget in self.schema.get('widgets', {}).items():
self.fields[field].widget = import_string(
widget['class'] widget['class']
)(**widget.get('kwargs', {})) )(**widget.get('kwargs', {}))
kwargs.update(field.get('kwargs', {}))
self.fields[field['name']] = field_class(**kwargs)
class DynamicForm(DynamicFormMixin, forms.Form): class DynamicForm(DynamicFormMixin, forms.Form):
pass pass