debian-python-django-jsonfield/jsonfield/forms.py

32 lines
939 B
Python

import json
from django import forms
from django.utils import six
from .widgets import JSONWidget
class JSONFormField(forms.CharField):
empty_values = [None, '']
def __init__(self, *args, **kwargs):
if 'widget' not in kwargs:
kwargs['widget'] = JSONWidget
super(JSONFormField, self).__init__(*args, **kwargs)
def to_python(self, value):
if isinstance(value, six.string_types) and value:
try:
return json.loads(value)
except ValueError as exc:
raise forms.ValidationError(
'JSON decode error: %s' % (six.u(exc.args[0]),)
)
else:
return value
def validate(self, value):
# This is required in older django versions.
if value in self.empty_values and self.required:
raise forms.ValidationError(self.error_messages['required'], code='required')