A Django app that allows users to dynamically create forms.
MIT License
A Django application that lets users create forms. This is achieved firstly setting up a form and form questions. The user is able to select the field type per question and thus create a form that supports various field types.
The package contains the following:
settings.py
The application can be installed by running the following command:
pip install django-form-creator
Once installed, add the following to your settings.py
file:
INSTALLED_APPS = [
...
"form_creator",
...
]
Run migrations:
python manage.py migrate
In your root urls.py
file, add the following:
from django.urls import path, include
urlpatterns = [
...
path('form-creator/', include('form_creator.urls')),
]
Note: you don't need to call the path "form-creator/", rename this to whatever you want.
This will add the following URLs to your root urls.py
file:
URL | Description |
---|---|
forms/ | Forms list view |
forms/create/ | Form create view |
forms/<int:pk>-<slug:slug>/ | Form detail view |
forms/<int:pk>-<slug:slug>/edit/ | Form edit view |
forms/<int:pk>-<slug:slug>/delete/ | Form delete view |
forms/<int:pk>-<slug:slug>/questions/edit/ | Form questions edit view |
forms/<int:pk>-<slug:slug>/response/ | Form for users to submit responses |
forms/<int:pk>-<slug:slug>/export/questions/ | Export form questions as CSV |
forms/<int:pk>-<slug:slug>/export/responses/ | Export form responses as CSV |
If you want to limit the available views, you can import each of the views directly. The views are located in form_creator.views
. If you want more control over the views, you inherit from the views in form_creator.views
and override the methods you want to change.
This might be useful when overriding templates and defining permissions.
The package comes with some templates to allows uses to manage and complete forms. If you wish to use these templates, you will need to download django-crispy-forms
and update your settings.py
file. Follow the instructions below:
pip install django-crispy-forms
In your settings.py
:
INSTALLED_APPS = [
...
"crispy_forms",
"form_creator",
...
]
CRISPY_TEMPLATE_PACK = "bootstrap4"
The included templates also make use of messages. Add the following to your settings.py
file:
from django.contrib.messages import constants as messages
MESSAGE_TAGS = {
messages.DEBUG: "alert-secondary",
messages.INFO: "alert-info",
messages.SUCCESS: "alert-success",
messages.WARNING: "alert-warning",
messages.ERROR: "alert-danger",
}
Once you have installed the application, it's time to create your first form.
You can either go to the admin panel or access the form_creator:form_list
view to start creating your first form. The default requirement is that you are logged in as a staff member in order to create a form.
In our example, we will create a sample form via the admin panel, and then complete it via the front end.
The first thing to do is give your form a title and a description.
The form will need to have an owner. This is to allow a person to have control of the form via the form_creator:form_detail
and form_creator:form_edit
views. This is useful if the owner of the form is not a staff user who can manage the form via the admin panel. If this is not applicable, you can set the owner to yourself.
There are 3 statuses to pick form: draft, active and inactive.
Setting the status to either draft or inactive would mean that users are not able to complete the form.
Setting the status to active would allow users to complete the form only if the form is within the start and end date.
The form must have a start date and can have an end date. The start date is the date from which the form will become live. Users will only be able to complete the form from the start date if the from status is set to active.
The end date is an optional configuration. If the value is set, it means that the form has no end date. Otherwise, the form will be live until the end date.
The editors section is allowed to assigns users who can edit the form details and questions. They are not however able to delete the form itself.
The next section is where you will be able to set the questions for your form. You are able to set question, any applicable choices and the field type.
Users are able to navigate to the URL for forms_creator:form_response
to complete the form.
The form generated will respect the form fields selected and any choices allowed.
Once the form is completed, they are able to press submit to submit the form.
If you would like to help develop this application here are a couple of things you can do:
python3 -m venv venv
. venv/bin/activate
pip install -r requirements.txt
example
contains a Django project for development. Move into that directory: cd example
python manage.py migrate
. As we are using an sqlite3 database, there is no need to create a database yourself.python manage.py createsuperuser
.python manage.py runserver
.make format
make lint
cd ..
make test-coverage
make update_readme_cov
.