Stream Forms

Wagtail CRX integrates with wagtail_flexible_forms (https://github.com/noripyt/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.

Note

Underlying functionality of Stream Forms may change in future versions as wagtail_flexible_forms is planned to be merged directly into Wagtail. We recommend using the simpler CoderedFormPage for forms that do not require advanced functionality (such as contact forms, etc.).

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.