Пример #1
0
def questionnaire_create(request):
    questionnaire = Questionnaire()
    InlineQuestionFormset = inlineformset_factory(Questionnaire,
                                                  Question,
                                                  formset=AtLeastOneFormSet,
                                                  form=QuestionForm,
                                                  extra=1,
                                                  exclude=('questionnaire', ))

    form = QuestionnaireForm(request.POST or None, instance=questionnaire)
    formset = InlineQuestionFormset(request.POST or None,
                                    instance=questionnaire)

    if form.is_valid() and formset.is_valid():
        newQuestionnaire = form.save(commit=False)
        # set index according to existing questionnaires
        newQuestionnaire.index = Questionnaire.objects.all().aggregate(
            Max('index'))['index__max'] + 1
        newQuestionnaire.save()
        form.save_m2m()

        formset.save()

        messages.success(request, _("Successfully created questionnaire."))
        return redirect('staff:questionnaire_index')
    else:
        return render(request, "staff_questionnaire_form.html",
                      dict(form=form, formset=formset))
Пример #2
0
    def test_automatic_order_correction_on_type_change(self):
        mommy.make(Questionnaire, order=72, type=Questionnaire.BOTTOM)

        questionnaire = mommy.make(Questionnaire,
                                   order=7,
                                   type=Questionnaire.TOP)
        question = mommy.make(Question)

        data = {
            'description_de': questionnaire.description_de,
            'description_en': questionnaire.description_en,
            'name_de': questionnaire.name_de,
            'name_en': questionnaire.name_en,
            'public_name_en': questionnaire.public_name_en,
            'public_name_de': questionnaire.public_name_de,
            'questions-0-id': question.id,
            'order': questionnaire.order,
            'type': Questionnaire.BOTTOM,
            'visibility': 2,
        }

        form = QuestionnaireForm(instance=questionnaire, data=data)
        self.assertTrue(form.is_valid())
        questionnaire = form.save()
        self.assertEqual(questionnaire.order, 73)
Пример #3
0
    def test_automatic_order_correction_on_type_change(self):
        baker.make(Questionnaire, order=72, type=Questionnaire.Type.BOTTOM)

        questionnaire = baker.make(Questionnaire,
                                   order=7,
                                   type=Questionnaire.Type.TOP)
        question = baker.make(Question)

        data = {
            "description_de": questionnaire.description_de,
            "description_en": questionnaire.description_en,
            "name_de": questionnaire.name_de,
            "name_en": questionnaire.name_en,
            "public_name_en": questionnaire.public_name_en,
            "public_name_de": questionnaire.public_name_de,
            "questions-0-id": question.id,
            "order": questionnaire.order,
            "type": Questionnaire.Type.BOTTOM,
            "visibility": 2,
        }

        form = QuestionnaireForm(instance=questionnaire, data=data)
        self.assertTrue(form.is_valid())
        questionnaire = form.save()
        self.assertEqual(questionnaire.order, 73)
Пример #4
0
def questionnaire_copy(request, questionnaire_id):
    if request.method == "POST":
        questionnaire = Questionnaire()
        InlineQuestionFormset = inlineformset_factory(
            Questionnaire,
            Question,
            formset=AtLeastOneFormSet,
            form=QuestionForm,
            extra=1,
            exclude=('questionnaire', ))

        form = QuestionnaireForm(request.POST, instance=questionnaire)
        formset = InlineQuestionFormset(request.POST.copy(),
                                        instance=questionnaire,
                                        save_as_new=True)

        if form.is_valid() and formset.is_valid():
            form.save()
            formset.save()

            messages.success(request, _("Successfully created questionnaire."))
            return redirect('staff:questionnaire_index')
        else:
            return render(request, "staff_questionnaire_form.html",
                          dict(form=form, formset=formset))
    else:
        questionnaire = get_object_or_404(Questionnaire, id=questionnaire_id)
        InlineQuestionFormset = inlineformset_factory(
            Questionnaire,
            Question,
            formset=AtLeastOneFormSet,
            form=QuestionForm,
            extra=1,
            exclude=('questionnaire', ))

        form = QuestionnaireForm(instance=questionnaire)
        formset = InlineQuestionFormset(
            instance=questionnaire, queryset=questionnaire.question_set.all())

        return render(request, "staff_questionnaire_form.html",
                      dict(form=form, formset=formset))
Пример #5
0
def make_questionnaire_edit_forms(request, questionnaire, editable):
    if editable:
        InlineQuestionFormset = inlineformset_factory(
            Questionnaire,
            Question,
            formset=AtLeastOneFormSet,
            form=QuestionForm,
            extra=1,
            exclude=('questionnaire', ))
    else:
        question_count = questionnaire.question_set.count()
        InlineQuestionFormset = inlineformset_factory(
            Questionnaire,
            Question,
            formset=AtLeastOneFormSet,
            form=QuestionForm,
            extra=0,
            exclude=('questionnaire', ),
            can_delete=False,
            max_num=question_count,
            validate_max=True,
            min_num=question_count,
            validate_min=True)

    form = QuestionnaireForm(request.POST or None, instance=questionnaire)
    formset = InlineQuestionFormset(request.POST or None,
                                    instance=questionnaire)

    if not editable:
        editable_fields = [
            'staff_only', 'obsolete', 'name_de', 'name_en', 'description_de',
            'description_en'
        ]
        for name, field in form.fields.items():
            if name not in editable_fields:
                field.disabled = True
        for question_form in formset.forms:
            for name, field in question_form.fields.items():
                if name is not 'id':
                    field.disabled = True

    return form, formset
Пример #6
0
    def test_force_highest_order(self):
        mommy.make(Questionnaire, order=45, type=Questionnaire.TOP)

        question = mommy.make(Question)

        data = {
            'description_de': 'English description',
            'description_en': 'German description',
            'name_de': 'A name',
            'name_en': 'A german name',
            'public_name_en': 'A display name',
            'public_name_de': 'A german display name',
            'questions-0-id': question.id,
            'order': 0,
            'type': Questionnaire.TOP,
        }

        form = QuestionnaireForm(data=data)
        self.assertTrue(form.is_valid())
        questionnaire = form.save(force_highest_order=True)
        self.assertEqual(questionnaire.order, 46)
Пример #7
0
    def test_force_highest_order(self):
        baker.make(Questionnaire, order=45, type=Questionnaire.Type.TOP)

        question = baker.make(Question)

        data = {
            "description_de": "English description",
            "description_en": "German description",
            "name_de": "A name",
            "name_en": "A german name",
            "public_name_en": "A display name",
            "public_name_de": "A german display name",
            "questions-0-id": question.id,
            "order": 0,
            "type": Questionnaire.Type.TOP,
            "visibility": 2,
        }

        form = QuestionnaireForm(data=data)
        self.assertTrue(form.is_valid())
        questionnaire = form.save(force_highest_order=True)
        self.assertEqual(questionnaire.order, 46)