Skip to content
Snippets Groups Projects
models.py 1012 B
Newer Older
  • Learn to ignore specific revisions
  • # Credit to https://github.com/BertrandBordage for initial implementation
    
    from collections import OrderedDict
    
    from wagtail.wagtailforms.models import AbstractForm
    
    from .blocks import FormFieldBlock
    
    from .forms import BlockFieldWrapper, StreamBaseForm
    
    
    
    class AbstractStreamForm(AbstractForm):
        class Meta:
            abstract = True
    
    
        def get_defined_fields(self):
            return self.form_fields
    
    
        def get_form_fields(self):
            form_fields = OrderedDict()
    
            field_blocks = self.get_defined_fields()
    
            for struct_child in field_blocks:
                block = struct_child.block
                struct_value = struct_child.value
                if isinstance(block, FormFieldBlock):
    
                    form_fields[struct_child.id] = block.get_field(struct_value)
    
                else:
                    form_fields[struct_child.id] = BlockFieldWrapper(struct_child)
            return form_fields
    
        def get_form_class(self):
            return type('WagtailStreamForm', (StreamBaseForm,), self.get_form_fields())