Enforce that questions cannot depend on other question which are asked during checkin (Z#2352753)

This commit is contained in:
Martin Gross
2019-10-14 10:12:09 +02:00
parent 8e9a5e371c
commit eafed2e213
2 changed files with 8 additions and 1 deletions

View File

@@ -48,7 +48,8 @@ class QuestionForm(I18nModelForm):
self.fields['items'].queryset = self.instance.event.items.all()
self.fields['items'].required = True
self.fields['dependency_question'].queryset = self.instance.event.questions.filter(
type__in=(Question.TYPE_BOOLEAN, Question.TYPE_CHOICE, Question.TYPE_CHOICE_MULTIPLE)
type__in=(Question.TYPE_BOOLEAN, Question.TYPE_CHOICE, Question.TYPE_CHOICE_MULTIPLE),
ask_during_checkin=False
)
if self.instance.pk:
self.fields['dependency_question'].queryset = self.fields['dependency_question'].queryset.exclude(
@@ -65,6 +66,9 @@ class QuestionForm(I18nModelForm):
def clean_dependency_question(self):
dep = val = self.cleaned_data.get('dependency_question')
if dep:
if dep.ask_during_checkin:
raise ValidationError(_('Question cannot depend on a question asked during check-in.'))
seen_ids = {self.instance.pk} if self.instance else set()
while dep:
if dep.pk in seen_ids: