You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
This form designer does not try to offer every last configuration possibility
of Django's forms, just through the administration interface instead of
directly in Python code. Instead, it strives to be a tool which everyone can
use right away, without the need for long explanations.
It offers a small set of predefined input fields such as:
Text fields (One line and multi line widgets possible)
E-mail address fields
Checkboxes
Dropdowns
Radio Buttons
Multiple selection checkboxes
Hidden input fields
Every field can optionally be declared mandatory, default values and help texts
are available too. That's it.
By default, form data is sent by e-mail to a freely definable e-mail address
and stored in the database (a XLSX export of saved submissions is provided too).
It is possible to add your own actions as well.
Installing the form designer
Install the package using pip:
$ pip install form_designer
Setting up the form designer
Add "form_designer" and "admin_ordering" to INSTALLED_APPS.
Run ./manage.py migrate form_designer
Go into Django's admin panel and add one or more forms with the fields you
require. Also select at least one action in the configuration options
selectbox, most often you'd want to select both the "E-mail" and the
"Save form submission" option. After saving once, you'll see additional
fields belonging to the selected configuration options, in this case
a field for entering an e-mail address where the submission results should
be sent to.
If you're using the form designer with FeinCMS, the content type can be
imported from form_designer.contents.FormContent. Otherwise, your
code should use the following methods (the code would probably reside in
a view):
# Somehow fetch the form_designer.models.Form instance:
instance = ...
# Build the form class:
form_class = instance.form()
# Standard form processing:
if request.method == "POST":
form = form_class(request.POST)
if form.is_valid():
# Do what you want, or run the configured processors:
result = instance.process(form, request)
# Maybe there's something useful in here:
pprint(result)
...
else:
form = form_class()
return render(...)
Adding custom actions
Custom actions can be added by appending them to
Form.CONFIG_OPTIONS:
The interesting part if the do_thing callable. It currently receives
four arguments, however you should also accept **kwargs to support
additional arguments added in the future:
model_instance: The Form model instance
form_instance: The dynamically generated form instance
request: The current HTTP request
config: The config options (keys and values defined through
form_fields; for example the email action defines an email
char field, and accesses its value using config["email"].