forked from CGM_Public/pretix_original
- [x] data model - [x] api - [x] backend editor - [x] backend validation logic - [x] frontend display logic - [x] frontend validation logic - [x] test checkout step - [x] test modify order in frontend - [x] test modify order in backend - [x] validation tests - [x] correctly evaluate dependency tree in frontend? - [x] copy events
40 lines
1.7 KiB
Python
40 lines
1.7 KiB
Python
from django.db.models import Prefetch
|
|
from django.utils.functional import cached_property
|
|
|
|
from pretix.base.models import Question, QuestionAnswer, QuestionOption
|
|
from pretix.base.views.mixins import BaseQuestionsViewMixin
|
|
from pretix.presale.forms.checkout import QuestionsForm
|
|
from pretix.presale.views import get_cart
|
|
|
|
|
|
class QuestionsViewMixin(BaseQuestionsViewMixin):
|
|
form_class = QuestionsForm
|
|
only_user_visible = True
|
|
|
|
@cached_property
|
|
def _positions_for_questions(self):
|
|
qqs = self.request.event.questions.all()
|
|
if self.only_user_visible:
|
|
qqs = qqs.filter(ask_during_checkin=False)
|
|
cart = get_cart(self.request).select_related(
|
|
'addon_to'
|
|
).prefetch_related(
|
|
'addons', 'addons__item', 'addons__variation',
|
|
Prefetch('answers',
|
|
QuestionAnswer.objects.prefetch_related('options'),
|
|
to_attr='answerlist'),
|
|
Prefetch('item__questions',
|
|
qqs.prefetch_related(
|
|
Prefetch('options', QuestionOption.objects.prefetch_related(Prefetch(
|
|
# This prefetch statement is utter bullshit, but it actually prevents Django from doing
|
|
# a lot of queries since ModelChoiceIterator stops trying to be clever once we have
|
|
# a prefetch lookup on this query...
|
|
'question',
|
|
Question.objects.none(),
|
|
to_attr='dummy'
|
|
)))
|
|
).select_related('dependency_question'),
|
|
to_attr='questions_to_ask')
|
|
)
|
|
return sorted(list(cart), key=self._keyfunc)
|