summaryrefslogtreecommitdiff
path: root/django/contrib/postgres/forms/jsonb.py
diff options
context:
space:
mode:
Diffstat (limited to 'django/contrib/postgres/forms/jsonb.py')
-rw-r--r--django/contrib/postgres/forms/jsonb.py69
1 files changed, 11 insertions, 58 deletions
diff --git a/django/contrib/postgres/forms/jsonb.py b/django/contrib/postgres/forms/jsonb.py
index 196d2b9096..ebc85efa6f 100644
--- a/django/contrib/postgres/forms/jsonb.py
+++ b/django/contrib/postgres/forms/jsonb.py
@@ -1,63 +1,16 @@
-import json
+import warnings
-from django import forms
-from django.core.exceptions import ValidationError
-from django.utils.translation import gettext_lazy as _
+from django.forms import JSONField as BuiltinJSONField
+from django.utils.deprecation import RemovedInDjango40Warning
__all__ = ['JSONField']
-class InvalidJSONInput(str):
- pass
-
-
-class JSONString(str):
- pass
-
-
-class JSONField(forms.CharField):
- default_error_messages = {
- 'invalid': _('ā€œ%(value)sā€ value must be valid JSON.'),
- }
- widget = forms.Textarea
-
- def to_python(self, value):
- if self.disabled:
- return value
- if value in self.empty_values:
- return None
- elif isinstance(value, (list, dict, int, float, JSONString)):
- return value
- try:
- converted = json.loads(value)
- except json.JSONDecodeError:
- raise ValidationError(
- self.error_messages['invalid'],
- code='invalid',
- params={'value': value},
- )
- if isinstance(converted, str):
- return JSONString(converted)
- else:
- return converted
-
- def bound_data(self, data, initial):
- if self.disabled:
- return initial
- try:
- return json.loads(data)
- except json.JSONDecodeError:
- return InvalidJSONInput(data)
-
- def prepare_value(self, value):
- if isinstance(value, InvalidJSONInput):
- return value
- return json.dumps(value)
-
- def has_changed(self, initial, data):
- if super().has_changed(initial, data):
- return True
- # For purposes of seeing whether something has changed, True isn't the
- # same as 1 and the order of keys doesn't matter.
- data = self.to_python(data)
- return json.dumps(initial, sort_keys=True) != json.dumps(data, sort_keys=True)
+class JSONField(BuiltinJSONField):
+ def __init__(self, *args, **kwargs):
+ warnings.warn(
+ 'django.contrib.postgres.forms.JSONField is deprecated in favor '
+ 'of django.forms.JSONField.',
+ RemovedInDjango40Warning, stacklevel=2,
+ )
+ super().__init__(*args, **kwargs)