Reuse get_fake_attendee_questions in QuestionList

This commit is contained in:
Mira Weller
2026-08-12 15:47:15 +02:00
parent 1c13a16f79
commit dc662c973b
2 changed files with 20 additions and 78 deletions
+18 -19
View File
@@ -638,7 +638,7 @@ class PortraitImageField(SizeValidationMixin, ExtValidationMixin, forms.FileFiel
FakeQuestion = namedtuple(
'FakeQuestion', 'system_question label position required help_text'
'FakeQuestion', 'id question position required help_text container_type'
)
@@ -647,19 +647,19 @@ def get_fake_attendee_questions(settings):
sqo = settings.system_question_order
if settings.attendee_names_asked:
fq.append(FakeQuestion('attendee_name_parts', _('Attendee name'), sqo.get('attendee_name_parts', 0), settings.attendee_names_required, ''))
fq.append(FakeQuestion('attendee_name_parts', _('Attendee name'), sqo.get('attendee_name_parts', 0), settings.attendee_names_required, '', Question.ContainerType.ORDERPOSITION))
if settings.attendee_emails_asked:
fq.append(FakeQuestion('attendee_email', _('Attendee email'), sqo.get('attendee_email', 0), settings.attendee_emails_required, ''))
fq.append(FakeQuestion('attendee_email', _('Attendee email'), sqo.get('attendee_email', 0), settings.attendee_emails_required, '', Question.ContainerType.ORDERPOSITION))
if settings.attendee_company_asked:
fq.append(FakeQuestion('company', _('Company'), sqo.get('company', 0), settings.attendee_company_required, ''))
fq.append(FakeQuestion('company', _('Company'), sqo.get('company', 0), settings.attendee_company_required, '', Question.ContainerType.ORDERPOSITION))
if settings.attendee_addresses_asked:
fq.append(FakeQuestion('street', _('Street'), sqo.get('street', 0), settings.attendee_addresses_required, ''))
fq.append(FakeQuestion('zipcode', _('ZIP code'), sqo.get('zipcode', 0), settings.attendee_addresses_required, ''))
fq.append(FakeQuestion('city', _('City'), sqo.get('city', 0), settings.attendee_addresses_required, ''))
fq.append(FakeQuestion('country', _('Country'), sqo.get('country', 0), settings.attendee_addresses_required, ''))
fq.append(FakeQuestion('street', _('Street'), sqo.get('street', 0), settings.attendee_addresses_required, '', Question.ContainerType.ORDERPOSITION))
fq.append(FakeQuestion('zipcode', _('ZIP code'), sqo.get('zipcode', 0), settings.attendee_addresses_required, '', Question.ContainerType.ORDERPOSITION))
fq.append(FakeQuestion('city', _('City'), sqo.get('city', 0), settings.attendee_addresses_required, '', Question.ContainerType.ORDERPOSITION))
fq.append(FakeQuestion('country', _('Country'), sqo.get('country', 0), settings.attendee_addresses_required, '', Question.ContainerType.ORDERPOSITION))
return fq
@@ -998,7 +998,6 @@ class TicketQuestionsForm(BaseQuestionsForm):
orderpos = self.orderpos = kwargs.pop('orderpos', None)
pos = cartpos or orderpos
item = pos.item
questions = pos.item.questions_to_ask
event = kwargs.pop('event')
self.all_optional = kwargs.pop('all_optional', False)
self.attendee_addresses_required = event.settings.attendee_addresses_required and not self.all_optional
@@ -1017,7 +1016,7 @@ class TicketQuestionsForm(BaseQuestionsForm):
for q in questions:
if isinstance(q, FakeQuestion):
self.fields[q.system_question] = self.build_system_question_field(request, event, pos, q)
self.fields[q.id] = self.build_system_question_field(request, event, pos, q)
else:
self.fields['question_%s' % q.id] = self.build_user_question_field(request, event, pos.answerlist, pos, q)
@@ -1084,21 +1083,21 @@ class TicketQuestionsForm(BaseQuestionsForm):
)
def build_system_question_field(self, request, event, pos, qc):
field_name = qc.system_question
field_name = qc.id
if field_name == 'attendee_name_parts':
return NamePartsFormField(
max_length=255,
required=qc.required and not self.all_optional,
scheme=event.settings.name_scheme,
titles=event.settings.name_scheme_titles,
label=qc.label,
label=qc.question,
help_text=qc.help_text,
initial=pos.attendee_name_parts,
)
if field_name == 'attendee_email':
return forms.EmailField(
required=qc.required and not self.all_optional,
label=qc.label,
label=qc.question,
help_text=qc.help_text,
initial=pos.attendee_email,
widget=forms.EmailInput(
@@ -1110,7 +1109,7 @@ class TicketQuestionsForm(BaseQuestionsForm):
if field_name == 'company':
return forms.CharField(
required=qc.required and not self.all_optional,
label=qc.label,
label=qc.question,
help_text=qc.help_text,
max_length=255,
initial=pos.company,
@@ -1119,7 +1118,7 @@ class TicketQuestionsForm(BaseQuestionsForm):
if field_name == 'street':
return forms.CharField(
required=qc.required and not self.all_optional,
label=qc.label,
label=qc.question,
help_text=qc.help_text,
widget=forms.Textarea(attrs={
'rows': 2,
@@ -1132,7 +1131,7 @@ class TicketQuestionsForm(BaseQuestionsForm):
return forms.CharField(
required=False,
max_length=30,
label=qc.label,
label=qc.question,
help_text=qc.help_text,
initial=pos.zipcode,
widget=forms.TextInput(attrs={
@@ -1142,7 +1141,7 @@ class TicketQuestionsForm(BaseQuestionsForm):
if field_name == 'city':
return forms.CharField(
required=False,
label=qc.label,
label=qc.question,
help_text=qc.help_text,
max_length=255,
initial=pos.city,
@@ -1156,7 +1155,7 @@ class TicketQuestionsForm(BaseQuestionsForm):
countries=CachedCountries
).formfield(
required=qc.required and not self.all_optional,
label=qc.label,
label=qc.question,
help_text=qc.help_text,
initial=country,
widget=forms.Select(attrs={
@@ -1184,7 +1183,7 @@ class TicketQuestionsForm(BaseQuestionsForm):
del self.data[fprefix + 'state']
field = forms.ChoiceField(
label=qc.label,
label=qc.question,
help_text=qc.help_text,
required=False,
choices=c,
+2 -59
View File
@@ -65,6 +65,7 @@ from pretix.api.serializers.item import (
ItemVariationSerializer,
)
from pretix.base.forms import I18nFormSet
from pretix.base.forms.questions import get_fake_attendee_questions
from pretix.base.models import (
CartPosition, Item, ItemCategory, ItemProgramTime, ItemVariation, LogEntry,
OrderPosition, Question, QuestionAnswer, QuestionOption, Quota,
@@ -440,66 +441,8 @@ class QuestionList(ListView):
def get_context_data(self, **kwargs):
ctx = super().get_context_data(**kwargs)
questions = []
sys_order = self.request.event.settings.system_question_order
if self.request.event.settings.attendee_names_asked:
questions.append(FakeQuestion(
id='attendee_name_parts',
question=_('Attendee name'),
position=sys_order.get('attendee_name_parts', 0),
required=self.request.event.settings.attendee_names_required,
container_type=Question.ContainerType.ORDERPOSITION,
))
if self.request.event.settings.attendee_emails_asked:
questions.append(FakeQuestion(
id='attendee_email',
question=_('Attendee email'),
position=sys_order.get('attendee_email', 0),
required=self.request.event.settings.attendee_emails_required,
container_type=Question.ContainerType.ORDERPOSITION,
))
if self.request.event.settings.attendee_company_asked:
questions.append(FakeQuestion(
id='company',
question=_('Company'),
position=sys_order.get('company', 0),
required=self.request.event.settings.attendee_company_required,
container_type=Question.ContainerType.ORDERPOSITION,
))
if self.request.event.settings.attendee_addresses_asked:
questions.append(FakeQuestion(
id='street',
question=_('Street'),
position=sys_order.get('street', 0),
required=self.request.event.settings.attendee_addresses_required,
container_type=Question.ContainerType.ORDERPOSITION,
))
questions.append(FakeQuestion(
id='zipcode',
question=_('ZIP code'),
position=sys_order.get('zipcode', 0),
required=self.request.event.settings.attendee_addresses_required,
container_type=Question.ContainerType.ORDERPOSITION,
))
questions.append(FakeQuestion(
id='city',
question=_('City'),
position=sys_order.get('city', 0),
required=self.request.event.settings.attendee_addresses_required,
container_type=Question.ContainerType.ORDERPOSITION,
))
questions.append(FakeQuestion(
id='country',
question=_('Country'),
position=sys_order.get('country', 0),
required=self.request.event.settings.attendee_addresses_required,
container_type=Question.ContainerType.ORDERPOSITION,
))
questions = get_fake_attendee_questions(self.request.event.settings)
questions += list(ctx['questions'])
questions.sort(key=lambda q: q.position)