Fields should not be required, serialize more types

This commit is contained in:
Raphael Michel
2015-03-06 11:55:05 +01:00
parent c6e081ca00
commit 98f7f07c2e
4 changed files with 30 additions and 6 deletions

View File

@@ -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)

View File

@@ -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):

View File

@@ -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)

View File

@@ -12,6 +12,7 @@ class BankTransfer(BasePaymentProvider):
('bank_details',
forms.CharField(
widget=forms.Textarea,
label=_('Bank account details')
label=_('Bank account details'),
required=False
))
])