diff --git a/src/pretix/control/forms/__init__.py b/src/pretix/control/forms/__init__.py
index 8793da50ad..6eff11a8c9 100644
--- a/src/pretix/control/forms/__init__.py
+++ b/src/pretix/control/forms/__init__.py
@@ -42,8 +42,11 @@ from django.core.files import File
from django.core.files.uploadedfile import UploadedFile
from django.forms.utils import from_current_timezone
from django.urls import reverse
+from django.utils.html import escape
+from django.utils.safestring import mark_safe
from django.utils.timezone import now
from django.utils.translation import gettext_lazy as _
+from django_scopes.forms import SafeModelMultipleChoiceField
from ...base.forms import I18nModelForm, SecretKeySettingsField
@@ -411,3 +414,8 @@ class SMTPSettingsMixin(forms.Form):
if data.get('smtp_use_tls') and data.get('smtp_use_ssl'):
raise ValidationError(_('You can activate either SSL or STARTTLS security, but not both at the same time.'))
return data
+
+
+class ItemMultipleChoiceField(SafeModelMultipleChoiceField):
+ def label_from_instance(self, obj):
+ return str(obj) if obj.active else mark_safe(f'{escape(obj)}')
diff --git a/src/pretix/control/forms/checkin.py b/src/pretix/control/forms/checkin.py
index 4cd0a1e6d4..e8e38e0b3a 100644
--- a/src/pretix/control/forms/checkin.py
+++ b/src/pretix/control/forms/checkin.py
@@ -31,6 +31,7 @@ from django_scopes.forms import (
from pretix.base.channels import get_all_sales_channels
from pretix.base.models.checkin import CheckinList
+from pretix.control.forms import ItemMultipleChoiceField
from pretix.control.forms.widgets import Select2
@@ -120,7 +121,7 @@ class CheckinListForm(forms.ModelForm):
'exit_all_at': NextTimeInput(attrs={'class': 'timepickerfield'}),
}
field_classes = {
- 'limit_products': SafeModelMultipleChoiceField,
+ 'limit_products': ItemMultipleChoiceField,
'gates': SafeModelMultipleChoiceField,
'subevent': SafeModelChoiceField,
'exit_all_at': NextTimeField,
@@ -164,7 +165,7 @@ class SimpleCheckinListForm(forms.ModelForm):
}),
}
field_classes = {
- 'limit_products': SafeModelMultipleChoiceField,
+ 'limit_products': ItemMultipleChoiceField,
'subevent': SafeModelChoiceField,
'gates': SafeModelMultipleChoiceField,
}
diff --git a/src/pretix/control/forms/item.py b/src/pretix/control/forms/item.py
index 1ee1e44aad..d145d97b11 100644
--- a/src/pretix/control/forms/item.py
+++ b/src/pretix/control/forms/item.py
@@ -41,6 +41,8 @@ from django.core.exceptions import ValidationError
from django.db.models import Max
from django.forms.formsets import DELETION_FIELD_NAME
from django.urls import reverse
+from django.utils.html import escape
+from django.utils.safestring import mark_safe
from django.utils.translation import (
gettext as __, gettext_lazy as _, pgettext_lazy,
)
@@ -57,7 +59,9 @@ from pretix.base.models import (
)
from pretix.base.models.items import ItemAddOn, ItemBundle, ItemMetaValue
from pretix.base.signals import item_copy_data
-from pretix.control.forms import SplitDateTimeField, SplitDateTimePickerWidget
+from pretix.control.forms import (
+ ItemMultipleChoiceField, SplitDateTimeField, SplitDateTimePickerWidget,
+)
from pretix.control.forms.widgets import Select2
from pretix.helpers.models import modelcopy
from pretix.helpers.money import change_decimal_field
@@ -168,7 +172,7 @@ class QuestionForm(I18nModelForm):
field_classes = {
'valid_datetime_min': SplitDateTimeField,
'valid_datetime_max': SplitDateTimeField,
- 'items': SafeModelMultipleChoiceField,
+ 'items': ItemMultipleChoiceField,
'dependency_question': SafeModelChoiceField,
}
@@ -200,9 +204,12 @@ class QuotaForm(I18nModelForm):
for item in items:
if len(item.variations.all()) > 0:
for v in item.variations.all():
- choices.append(('{}-{}'.format(item.pk, v.pk), '{} – {}'.format(item, v.value)))
+ choices.append((
+ '{}-{}'.format(item.pk, v.pk),
+ '{} – {}'.format(item, v.value) if item.active else mark_safe(f'{escape(item)} – {escape(v.value)}')
+ ))
else:
- choices.append(('{}'.format(item.pk), str(item)))
+ choices.append(('{}'.format(item.pk), str(item) if item.active else mark_safe(f'{escape(item)}')))
self.fields['itemvars'] = forms.MultipleChoiceField(
label=_('Products'),
diff --git a/src/pretix/control/templates/pretixcontrol/items/index.html b/src/pretix/control/templates/pretixcontrol/items/index.html
index ec00e86d6a..92847f61e9 100644
--- a/src/pretix/control/templates/pretixcontrol/items/index.html
+++ b/src/pretix/control/templates/pretixcontrol/items/index.html
@@ -44,11 +44,10 @@
{% regroup items by category as cat_list %}
{% for c in cat_list %}
{% for i in c.list %}
-