Newer
Older
# 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())