Skip to content

Commit

Permalink
Fix saving dictionaries.
Browse files Browse the repository at this point in the history
  • Loading branch information
michaelkuty committed Mar 25, 2016
1 parent 8f59e54 commit a048714
Show file tree
Hide file tree
Showing 2 changed files with 25 additions and 4 deletions.
8 changes: 4 additions & 4 deletions constance/admin.py
Expand Up @@ -19,7 +19,7 @@
from django.utils.translation import ugettext_lazy as _
from leonardo.forms import Layout, SelfHandlingForm, Tab, TabHolder

from .forms import JSONTextArea
from .forms import JSONTextArea, JsonField
from . import LazyConfig, settings

try:
Expand All @@ -45,7 +45,7 @@
})


DICT_LIKE = (fields.CharField, {
DICT_LIKE = (JsonField, {
'widget': JSONTextArea(attrs={'rows': 10, 'cols': 30}),
'required': False,
})
Expand Down Expand Up @@ -131,9 +131,9 @@ def __init__(self, initial, *args, **kwargs):
self.initial['version'] = version_hash.hexdigest()

def handle(self, request, data):
for name in data.keys():
for name in self.cleaned_data.keys():
if not name == "version":
value = data.get(name, settings.CONFIG.get(name)[0])
value = self.cleaned_data.get(name, settings.CONFIG.get(name)[0])
setattr(config, name, value)
# set to settings module
setattr(django_settings, name, value)
Expand Down
21 changes: 21 additions & 0 deletions constance/forms.py
Expand Up @@ -11,3 +11,24 @@ def render(self, name, value, attrs=None):
if not isinstance(value, six.string_types):
value = json.dumps(value, indent=2, default={})
return super(JSONTextArea, self).render(name, value, attrs)


class JsonField(forms.Field):

widget = JSONTextArea

def to_python(self, value):
"Normalize data to a string."

# Return an empty list if no input was given.
if not value:
return {}

try:
cleaned = json.loads(value)
except Exception as e:
raise forms.ValidationError([
e
])

return cleaned

0 comments on commit a048714

Please sign in to comment.