diff --git a/src/pretix/presale/forms/renderers.py b/src/pretix/presale/forms/renderers.py
index 891f24042..9c177197c 100644
--- a/src/pretix/presale/forms/renderers.py
+++ b/src/pretix/presale/forms/renderers.py
@@ -60,8 +60,8 @@ def render_label(content, label_for=None, label_class=None, label_title='', labe
# => remove for-attribute as well as "required"-text appended to label
if 'for' in attrs:
del attrs['for']
- else:
- opt += ', {}'.format(pgettext('form', 'required')) if not optional else ''
+ elif not optional:
+ opt += ', {}'.format(pgettext('form', 'required'))
builder = '<{tag}{attrs}>{content}{opt}{tag}>'
return format_html(
@@ -155,17 +155,28 @@ class CheckoutFieldRenderer(FieldRenderer):
label_class=self.get_label_class(),
label_id=label_id,
attrs=attrs,
- optional=not required and not isinstance(self.widget, CheckboxInput),
+ optional=not required,
is_valid=is_valid
) + html
return html
def put_inside_label(self, html):
content = "{field} {label}".format(field=html, label=self.label)
+
+ if hasattr(self.field.field, '_show_required'):
+ # e.g. payment settings forms where a field is only required if the payment provider is active
+ required = self.field.field._show_required
+ elif hasattr(self.field.field, '_required'):
+ # e.g. payment settings forms where a field is only required if the payment provider is active
+ required = self.field.field._required
+ else:
+ required = self.field.field.required
+
return render_label(
content=mark_safe(content),
label_for=self.field.id_for_label,
label_title=escape(strip_tags(self.field_help)),
+ optional=not required,
)
def wrap_label_and_field(self, html):