forked from CGM_Public/pretix_original
Fields should not be required, serialize more types
This commit is contained in:
@@ -40,5 +40,7 @@ class SettingsForm(forms.Form):
|
||||
def save(self):
|
||||
for name, field in self.fields.items():
|
||||
value = self.cleaned_data[name]
|
||||
if self.obj.settings.get(value, as_type=type(value)) != value:
|
||||
if value is None:
|
||||
del self.obj.settings[name]
|
||||
elif self.obj.settings.get(value, as_type=type(value)) != value:
|
||||
self.obj.settings.set(name, value)
|
||||
|
||||
@@ -1,4 +1,8 @@
|
||||
import json
|
||||
import decimal
|
||||
|
||||
from django.db.models import Model
|
||||
from versions.models import Versionable
|
||||
|
||||
|
||||
DEFAULTS = {
|
||||
@@ -33,6 +37,8 @@ class SettingsProxy:
|
||||
def _unserialize(self, value, as_type):
|
||||
if isinstance(value, as_type):
|
||||
return value
|
||||
elif value is None:
|
||||
return None
|
||||
elif as_type == int:
|
||||
return int(value)
|
||||
elif as_type == float:
|
||||
@@ -41,15 +47,27 @@ class SettingsProxy:
|
||||
return json.loads(value)
|
||||
elif as_type == bool:
|
||||
return value == 'True'
|
||||
elif as_type == decimal.Decimal:
|
||||
return decimal.Decimal(value)
|
||||
elif issubclass(as_type, Versionable):
|
||||
return as_type.objects.current.get(identity=value)
|
||||
elif issubclass(as_type, Model):
|
||||
return as_type.objects.get(pk=value)
|
||||
return value
|
||||
|
||||
def _serialize(self, value):
|
||||
if isinstance(value, str):
|
||||
return value
|
||||
elif isinstance(value, int) or isinstance(value, float) or isinstance(value, bool):
|
||||
elif isinstance(value, int) or isinstance(value, float) \
|
||||
or isinstance(value, bool) or isinstance(value, decimal.Decimal):
|
||||
return str(value)
|
||||
elif isinstance(value, list) or isinstance(value, bool):
|
||||
return json.dumps(value)
|
||||
elif isinstance(value, Versionable):
|
||||
return value.identity
|
||||
elif isinstance(value, Model):
|
||||
return value.pk
|
||||
|
||||
raise TypeError('Unable to serialize %s into a setting.' % str(type(value)))
|
||||
|
||||
def get(self, key, default=None, as_type=str):
|
||||
|
||||
@@ -131,17 +131,20 @@ class PaymentSettings(EventPermissionRequiredMixin, TemplateView, SingleObjectMi
|
||||
[
|
||||
('payment_%s__enabled' % provider.identifier,
|
||||
forms.BooleanField(
|
||||
label=_('Enable payment method')
|
||||
label=_('Enable payment method'),
|
||||
required=False
|
||||
)),
|
||||
('payment_%s__fee_abs' % provider.identifier,
|
||||
forms.DecimalField(
|
||||
label=_('Additional fee'),
|
||||
help_text=_('Absolute value')
|
||||
help_text=_('Absolute value'),
|
||||
required=False
|
||||
)),
|
||||
('payment_%s__fee_percent' % provider.identifier,
|
||||
forms.DecimalField(
|
||||
label=_('Additional fee'),
|
||||
help_text=_('Percentage')
|
||||
help_text=_('Percentage'),
|
||||
required=False
|
||||
)),
|
||||
] + [
|
||||
('payment_%s_%s' % (provider.identifier, k), v)
|
||||
|
||||
@@ -12,6 +12,7 @@ class BankTransfer(BasePaymentProvider):
|
||||
('bank_details',
|
||||
forms.CharField(
|
||||
widget=forms.Textarea,
|
||||
label=_('Bank account details')
|
||||
label=_('Bank account details'),
|
||||
required=False
|
||||
))
|
||||
])
|
||||
|
||||
Reference in New Issue
Block a user