A django application which can be used as a base / starting point for questionnaire functionality in your project. It heavily relies on django form fields & widgets and uses PostgreSQL JSON fields to store the results.
- Django version 1.11, 2.0 or 2.1
- django-ordered-model (see Compatibility matrix)
- A PostgreSQL Database
-
Add "questionnaire_core" and its dependency to your INSTALLED_APPS setting like this:
INSTALLED_APPS = [ ... 'ordered_model', 'questionnaire_core', ]
-
Create a view based on
questionnaire_core.views.generic.QuestionnaireFormView
; a simple version might look like this:class BasicQuestionnaireView(QuestionnaireFormView): template_name = 'basic_questionnaire.html' def get_questionnaire(self): return Questionnaire.objects.get(pk=self.kwargs.get('pk')) def get_questionnaire_result_set(self): if self.request.GET.get('result_set'): return QuestionnaireResult.objects.get(pk=self.request.GET.get('result_set')) return QuestionnaireResult(questionnaire=self.get_questionnaire()) def get_success_url(self): return reverse('basic_questionnaire', args=(self.kwargs.get('pk'),)) def form_valid(self, form): # Add current result set to the url (allows editing of the result) redirect = super(BasicQuestionnaireView, self).form_valid(form) url_params = urlencode({'result_set': form.current_result_set.pk}) return HttpResponseRedirect('{url}?{params}'.format(url=redirect.url, params=url_params))
-
Add the new view to your URLconf:
url(r'^questionnaire/(?P<pk>[0-9]+)/$', BasicQuestionnaireView.as_view(), name='basic_questionnaire'),
-
Run
python manage.py migrate
to create the questionnaire_core models. -
Start the development server and visit http://127.0.0.1:8000/admin/ to create a questionnaire (you'll need the Admin app enabled).
-
Visit http://127.0.0.1:8000/questionnaire/1/ to test your first questionnaire.
-
Upgrade packaging tools:
pip install --upgrade pip setuptools wheel
-
Install Django (the
example_app
expects django 1.11):pip install Django~=1.11.0 django-ordered-model~=2.1.0 psycopg2
-
Install tox, isort & flake8
pip install tox isort flake8