From 80b6a3d27d30f45429d4b75a11c6f6619ca83edc Mon Sep 17 00:00:00 2001 From: Felix Rindt Date: Tue, 28 Jul 2020 16:32:06 +0200 Subject: [PATCH] Fix #1675 -- Allow '0' as answer to number questions (#1732) Co-authored-by: Raphael Michel --- src/pretix/base/forms/questions.py | 3 ++- src/pretix/presale/checkoutflow.py | 2 +- src/tests/presale/test_checkout.py | 3 ++- 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/src/pretix/base/forms/questions.py b/src/pretix/base/forms/questions.py index 717b342663..fa8d36154f 100644 --- a/src/pretix/base/forms/questions.py +++ b/src/pretix/base/forms/questions.py @@ -550,7 +550,8 @@ class BaseQuestionsForm(forms.Form): if not self.all_optional: for q in question_cache.values(): - if question_is_required(q) and not d.get('question_%d' % q.pk): + answer = d.get('question_%d' % q.pk) + if question_is_required(q) and not answer and answer != 0: raise ValidationError({'question_%d' % q.pk: [_('This field is required')]}) return d diff --git a/src/pretix/presale/checkoutflow.py b/src/pretix/presale/checkoutflow.py index 5d77533cf1..adc770a706 100644 --- a/src/pretix/presale/checkoutflow.py +++ b/src/pretix/presale/checkoutflow.py @@ -570,7 +570,7 @@ class QuestionsStep(QuestionsViewMixin, CartMixin, TemplateFlowStep): ) for q in cp.item.questions_to_ask: - if question_is_required(q) and not answ.get(q.id): + if question_is_required(q) and q.id not in answ: if warn: messages.warning(request, _('Please fill in answers to all required questions.')) return False diff --git a/src/tests/presale/test_checkout.py b/src/tests/presale/test_checkout.py index 86371f8928..1a41340419 100644 --- a/src/tests/presale/test_checkout.py +++ b/src/tests/presale/test_checkout.py @@ -2660,7 +2660,7 @@ class QuestionsTestCase(BaseCheckoutTestCase, TestCase): # Corrected request response = self.client.post('/%s/%s/checkout/questions/' % (self.orga.slug, self.event.slug), { '%s-question_%s' % (cr1.id, q1.id): '42', - '%s-question_%s' % (cr2.id, q1.id): '23', + '%s-question_%s' % (cr2.id, q1.id): '0', '%s-question_%s' % (cr1.id, q2.id): 'Internet', '%s-question_%s' % (cr2.id, q2.id): '', 'email': 'admin@localhost' @@ -2750,6 +2750,7 @@ class QuestionsTestCase(BaseCheckoutTestCase, TestCase): event=self.event, question='Why not?', type=Question.TYPE_TEXT, required=True, dependency_question=self.q3, dependency_values=['False'] ) + self.ticket.questions.add(self.q1) self.ticket.questions.add(self.q2a) self.ticket.questions.add(self.q2b)