Change the schema format for the dynamic form class.
Signed-off-by: Roberto Rosario <roberto.rosario.gonzalez@gmail.com>
This commit is contained in:
@@ -88,24 +88,29 @@ 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']:
|
widgets = self.schema.get('widgets', {})
|
||||||
field_class = import_string(field['class'])
|
field_order = self.schema.get(
|
||||||
|
'field_order', self.schema['fields'].keys()
|
||||||
|
)
|
||||||
|
|
||||||
|
for field_name in field_order:
|
||||||
|
field_data = self.schema['fields'][field_name]
|
||||||
|
field_class = import_string(field_data['class'])
|
||||||
kwargs = {
|
kwargs = {
|
||||||
'label': field['label'],
|
'label': field_data['label'],
|
||||||
'required': field.get('required', True),
|
'required': field_data.get('required', True),
|
||||||
'initial': field.get('default', None),
|
'initial': field_data.get('default', None),
|
||||||
'help_text': field.get('help_text'),
|
'help_text': field_data.get('help_text'),
|
||||||
}
|
}
|
||||||
if widgets and field['name'] in widgets:
|
if widgets and field_name in widgets:
|
||||||
widget = widgets[field['name']]
|
widget = widgets[field_name]
|
||||||
kwargs['widget'] = import_string(
|
kwargs['widget'] = import_string(
|
||||||
widget['class']
|
widget['class']
|
||||||
)(**widget.get('kwargs', {}))
|
)(**widget.get('kwargs', {}))
|
||||||
|
|
||||||
kwargs.update(field.get('kwargs', {}))
|
kwargs.update(field_data.get('kwargs', {}))
|
||||||
self.fields[field['name']] = field_class(**kwargs)
|
self.fields[field_name] = field_class(**kwargs)
|
||||||
|
|
||||||
|
|
||||||
class DynamicForm(DynamicFormMixin, forms.Form):
|
class DynamicForm(DynamicFormMixin, forms.Form):
|
||||||
|
|||||||
Reference in New Issue
Block a user