forms: fix file size checking

pull/73/head
Christian Merten 1 year ago
parent ee126335b8
commit bf5ad088cb
Signed by: christian.merten
GPG Key ID: D953D69721B948B3

@ -26,6 +26,9 @@ sendfile on;
keepalive_timeout 65;
# max upload size
client_max_body_size 15M;
#gzip on;
#include /etc/nginx/conf.d/*.conf;

@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-11-13 23:36+0100\n"
"POT-Creation-Date: 2024-11-17 14:17+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@ -68,10 +68,14 @@ msgstr "Abrechnung einreichen"
msgid "Invite to group"
msgstr "Zu Gruppe einladen"
#: utils.py:26
#: utils.py:14
msgid "Please keep filesize under {} MiB. Current filesize: {:10.2f} MiB."
msgstr "Maximale Dateigröße {} MiB. Aktuelle Dateigröße: {:10.2f} MiB."
#: utils.py:42
msgid "Filetype not supported."
msgstr "Dateityp nicht unterstützt."
#: utils.py:28
#: utils.py:44
msgid "Please keep filesize under {}. Current filesize: {}"
msgstr "Maximale Dateigröße {}. Aktuelle Dateigröße: {}."

@ -208,7 +208,7 @@ class Attachment(CommonModel):
f = RestrictedFileField(_('file'),
upload_to='attachments',
blank=True,
max_upload_size=10485760)
max_upload_size=10)
def __str__(self):
return os.path.basename(self.f.name) if self.f.name else _("Empty")

@ -254,7 +254,7 @@ class Member(Person):
registration_form = RestrictedFileField(verbose_name=_('registration form'),
upload_to='registration_forms',
blank=True,
max_upload_size=5242880,
max_upload_size=5,
content_types=['application/pdf',
'image/jpeg',
'image/png',
@ -262,7 +262,7 @@ class Member(Person):
image = RestrictedFileField(verbose_name=_('image'),
upload_to='people',
blank=True,
max_upload_size=5242880,
max_upload_size=5,
content_types=['image/jpeg',
'image/png',
'image/gif'])

@ -185,7 +185,7 @@ def render_register(request, group, form=None, emergency_contacts_formset=None,
'emergency_contacts_formset': emergency_contacts_formset,
'group': group,
'waiter_key': waiter_key,
'pwd': pwd,
'password': pwd,
'sektion': settings.SEKTION,
'registration': True
})

@ -78,7 +78,7 @@ class Image(models.Model):
f = RestrictedFileField(_('file'),
upload_to='images',
blank=True,
max_upload_size=10485760)
max_upload_size=10)
def __str__(self):
return os.path.basename(self.f.name) if self.f.name else _("Empty")

@ -3,6 +3,21 @@ from django.core.exceptions import ValidationError
from django.utils.translation import gettext_lazy as _
def file_size_validator(max_upload_size):
"""
Returns a function checking if the supplied file has file size less or equal
than `max_upload_size` in MB.
"""
def check_file_size(value):
limit = max_upload_size * 1024 * 1024
if value.size > limit:
raise ValidationError(_('Please keep filesize under {} MiB. '
'Current filesize: '
'{:10.2f} MiB.').format(max_upload_size,
value.size / 1024 / 1024))
return check_file_size
class RestrictedFileField(models.FileField):
def __init__(self, *args, **kwargs):
@ -16,6 +31,7 @@ class RestrictedFileField(models.FileField):
self.content_types = None
super(RestrictedFileField, self).__init__(*args, **kwargs)
self.validators = [file_size_validator(self.max_upload_size)]
def clean(self, *args, **kwargs):
data = super(RestrictedFileField, self).clean(*args, **kwargs)

Loading…
Cancel
Save