Form Builder¶
Form builder is a collection of tools built on top of Page Builder that help with the creation of HTML forms.
To enable Form Builder, add widgy.contrib.form_builder to
your INSTALLED_APPS.
Installation¶
Form builder depends on the following packages:
- django-widgy[page_builder]
- django-extensions
- html2text
- phonenumbers
You can install them manually, or you can install them using the django-widgy package:
$ pip install django-widgy[page_builder,form_builder]
Success Handlers¶
When a user submits a Form, the Form will loop through all of
the success handler widgets to do the things that you would normally put in the
form_valid method of a django.views.generic.FormView, for
example. Form Builder provides a couple of built-in success handlers that do
things like saving the data, sending emails, or submitting to Salesforce.
Widgets¶
-
class
widgy.contrib.form_builder.models.Form¶ This widget corresponds to the HTML
<form>tag. It acts as a container and also can be used to construct a Django Form class.-
build_form_class(self)¶ Returns a Django Form class based on the FormField widgets inside the form.
-
-
class
widgy.contrib.form_builder.models.Uncaptcha¶
-
class
widgy.contrib.form_builder.models.FormField¶ FormFieldis an abstract base class for the following widgets. EachFormFieldhas the following fields which correspond to the same attributes ondjango.forms.fields.Field.-
label¶ Corresponds with the HTML
<label>tag. This is the text that will go inside the label.
-
required¶ Indicates whether or not this field is required. Defaults to True.
-
help_text¶ A TextField for outputting help text.
-
-
class
widgy.contrib.form_builder.models.FormInput¶ This is a widget for all simple
<input>types. It supports the following input types:text,number,email,tel,checkbox,date. Respectively they correspond with the following Django formfields:CharField,IntegerField,EmailField,PhoneNumberField,BooleanField,DateField.
-
class
widgy.contrib.form_builder.models.Textarea¶
-
class
widgy.contrib.form_builder.models.ChoiceField¶
-
class
widgy.contrib.form_builder.models.MultipleChoiceField¶
Owner Contract¶
For custom Widgy owners, Form Builder needs to have a view to use for handling form submissions.
- Each widgy owner should implement a
get_form_action_url(form, widgy_context)method that returns a URL that points to a view (see step 2). - Create a view to handle form submissions for each owner. Form Builder provides the
class-based views mixin,
HandleFormMixin, to make this easier.
Views¶
-
class
widgy.contrib.form_builder.views.HandleFormMixin¶ An abstract view mixin for handling form_builder.Form submissions. It inherits from
django.views.generic.edit.FormMixin.It should be registered with a URL similar to the following.
url('^form/(?P<form_node_pk>[^/]*)/$', 'your_view')
HandleFormMixindoes not implement a GET method, so your subclass should handle that. Here is an example of a fully functioning implementation:from django.views.generic import DetailView from widgy.contrib.form_builder.views import HandleFormMixin class EventDetailView(HandleFormMixin, DetailView): model = Event def post(self, *args, **kwargs): self.object = self.get_object() return super(EventDetailView, self).post(*args, **kwargs)
widgy.contrib.widgy_mezzanine.views.HandleFormViewprovides an even more robust example implementation.