From d4ef16b31ac13c89d6abe993fde8392c6867067d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Felix=20Sch=C3=A4fer?= Date: Fri, 21 Jan 2022 15:49:24 +0100 Subject: [PATCH] Fix #2320 - Move file upload "required" attrs manipulation from init to rendering (#2399) --- src/pretix/base/forms/widgets.py | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/src/pretix/base/forms/widgets.py b/src/pretix/base/forms/widgets.py index 68ce21a73f..7b570eeb19 100644 --- a/src/pretix/base/forms/widgets.py +++ b/src/pretix/base/forms/widgets.py @@ -86,14 +86,6 @@ class TimePickerWidget(forms.TimeInput): class UploadedFileWidget(forms.ClearableFileInput): def __init__(self, *args, **kwargs): - # Browsers can't recognize that the server already has a file uploaded - # Don't mark this input as being required if we already have an answer - # (this needs to be done via the attrs, otherwise we wouldn't get the "required" star on the field label) - attrs = kwargs.get('attrs', {}) - if kwargs.get('required') and kwargs.get('initial'): - attrs.update({'required': None}) - kwargs.update({'attrs': attrs}) - self.position = kwargs.pop('position') self.event = kwargs.pop('event') self.answer = kwargs.pop('answer') @@ -125,6 +117,15 @@ class UploadedFileWidget(forms.ClearableFileInput): 'answer': self.answer.pk, }) + def get_context(self, name, value, attrs): + # Browsers can't recognize that the server already has a file uploaded + # Don't mark this input as being required if we already have an answer + # (this needs to be done via the attrs, otherwise we wouldn't get the "required" star on the field label) + ctx = super().get_context(name, value, attrs) + if ctx['widget']['is_initial']: + ctx['widget']['attrs']['required'] = False + return ctx + def format_value(self, value): if self.is_initial(value): return self.FakeFile(value, self.position, self.event, self.answer)