Allowed settings to contain files

This commit is contained in:
Raphael Michel
2015-08-15 22:55:27 +02:00
parent 0ea6fe02d3
commit 30fd287aab
7 changed files with 85 additions and 12 deletions

View File

@@ -1,3 +1,4 @@
import os
from functools import partial
from itertools import product
@@ -403,3 +404,21 @@ class VariationsField(forms.ModelMultipleChoiceField):
return cleaned_value
choices = property(_get_choices, forms.ChoiceField._set_choices)
class ExtFileField(forms.FileField):
def __init__(self, *args, **kwargs):
ext_whitelist = kwargs.pop("ext_whitelist")
self.ext_whitelist = [i.lower() for i in ext_whitelist]
super().__init__(*args, **kwargs)
def clean(self, *args, **kwargs):
data = super().clean(*args, **kwargs)
if data:
filename = data.name
ext = os.path.splitext(filename)[1]
ext = ext.lower()
if ext not in self.ext_whitelist:
raise forms.ValidationError(_("Filetype not allowed!"))
return data

View File

@@ -185,7 +185,6 @@ class ProviderForm(SettingsForm):
for k, v in self.fields.items():
val = cleaned_data.get(k)
if v._required and (val is None or val == ""):
print(enabled, k, v)
self.add_error(k, _('This field is required.'))
@@ -217,5 +216,4 @@ class TicketSettingsForm(SettingsForm):
for k, v in self.fields.items():
val = cleaned_data.get(k)
if v._required and (val is None or val == ""):
print(enabled, k, v)
self.add_error(k, _('This field is required.'))

View File

@@ -2,7 +2,7 @@
{% load i18n %}
{% load bootstrap3 %}
{% block inside %}
<form action="" method="post" class="form-horizontal">
<form action="" method="post" class="form-horizontal" enctype="multipart/form-data">
{% csrf_token %}
<fieldset>
<legend>{% trans "Ticket download" %}</legend>

View File

@@ -231,7 +231,8 @@ class TicketSettings(EventPermissionRequiredMixin, FormView):
provider.form = ProviderForm(
obj=self.request.event,
settingspref='ticketoutput_%s_' % provider.identifier,
data=(self.request.POST if self.request.method == 'POST' else None)
data=(self.request.POST if self.request.method == 'POST' else None),
files=(self.request.FILES if self.request.method == 'POST' else None)
)
provider.form.fields = OrderedDict(
[