Stream Forms¶
Wagtail CRX integrates with wagtail-flexible-forms. A Stream Form enables forms built from StreamFields for advanced functionality such as multi-step forms, mixed content and form fields, and conditional logic.
Usage¶
First start by creating a “Stream Form” (may be named differently on your specific website). Add content to this page as you would for a normal Form. By and large the editing experience is similar between a Form and a Stream Form.
Conditional Logic¶
To enable conditional logic, click Advanced Settings and enter a “Custom ID” on a field. Then on a second field, enter that same ID for “Condition Trigger ID” and a desired value for “Condition Trigger Value”. The second field will only then show if the trigger value is selected in the first field. For example:
Field One (checkbox field):
Custom ID: swallows-or-coconuts
[ ] African Swallow
[x] Coconut
Field Two (text field):
Condition Trigger ID: swallows-or-coconuts
Condition Trigger Value: Coconut
In this scenario, Field Two will be shown because the user selected “Coconut” in Field One (identified by: “swallows-or-coconuts”). If the user unchecks “Coconut”, Field Two will then be hidden.
Note
As of version 0.15, fields with a Condition Trigger ID should NOT be marked required.
Content Tab¶
Form Fields: This field is a bit different from its normal Form counterpart. Instead of the normal Form’s form field process, form fields are generated via a StreamField. This is nice because it allows you to mix content into your form, in between form elements. At the top level of the StreamField, you are able to create a step block. Each step block represents a piece of the form that will be loaded one at a time. In each step block is an additional StreamField that contains a mix of form fields and content blocks.
Implementation¶
The stream form functionality is built-in to Wagtail CRX but is not enabled by default.
To implement, add the following to your website/models.py
from coderedcms.models import CoderedEmail, CoderedStreamFormPage
class StreamFormPage(CoderedStreamFormPage):
class Meta:
verbose_name = 'Stream Form'
template = 'coderedcms/pages/stream_form_page.html'
class StreamFormConfirmEmail(CoderedEmail):
page = ParentalKey('StreamFormPage', related_name='confirmation_emails')
Next run python manage.py makemigrations website
and python manage.py migrate
to create
the new pages in your project.