mirror of https://github.com/django/django.git
Fixed #26748 -- Allowed overriding JSONField's widget with an attribute.
This commit is contained in:
parent
57eb17b8c7
commit
f2c0eb19e9
|
@ -15,10 +15,7 @@ class JSONField(forms.CharField):
|
||||||
default_error_messages = {
|
default_error_messages = {
|
||||||
'invalid': _("'%(value)s' value must be valid JSON."),
|
'invalid': _("'%(value)s' value must be valid JSON."),
|
||||||
}
|
}
|
||||||
|
widget = forms.Textarea
|
||||||
def __init__(self, **kwargs):
|
|
||||||
kwargs.setdefault('widget', forms.Textarea)
|
|
||||||
super(JSONField, self).__init__(**kwargs)
|
|
||||||
|
|
||||||
def to_python(self, value):
|
def to_python(self, value):
|
||||||
if value in self.empty_values:
|
if value in self.empty_values:
|
||||||
|
|
|
@ -3,7 +3,7 @@ import unittest
|
||||||
|
|
||||||
from django.core import exceptions, serializers
|
from django.core import exceptions, serializers
|
||||||
from django.db import connection
|
from django.db import connection
|
||||||
from django.forms import CharField, Form
|
from django.forms import CharField, Form, widgets
|
||||||
from django.test import TestCase
|
from django.test import TestCase
|
||||||
from django.utils.html import escape
|
from django.utils.html import escape
|
||||||
|
|
||||||
|
@ -291,3 +291,21 @@ class TestFormField(PostgreSQLTestCase):
|
||||||
form = JsonForm({'name': 'xy', 'jfield': '{"foo"}'})
|
form = JsonForm({'name': 'xy', 'jfield': '{"foo"}'})
|
||||||
# Appears once in the textarea and once in the error message
|
# Appears once in the textarea and once in the error message
|
||||||
self.assertEqual(form.as_p().count(escape('{"foo"}')), 2)
|
self.assertEqual(form.as_p().count(escape('{"foo"}')), 2)
|
||||||
|
|
||||||
|
def test_widget(self):
|
||||||
|
"""The default widget of a JSONField is a Textarea."""
|
||||||
|
field = forms.JSONField()
|
||||||
|
self.assertIsInstance(field.widget, widgets.Textarea)
|
||||||
|
|
||||||
|
def test_custom_widget_kwarg(self):
|
||||||
|
"""The widget can be overridden with a kwarg."""
|
||||||
|
field = forms.JSONField(widget=widgets.Input)
|
||||||
|
self.assertIsInstance(field.widget, widgets.Input)
|
||||||
|
|
||||||
|
def test_custom_widget_attribute(self):
|
||||||
|
"""The widget can be overridden with an attribute."""
|
||||||
|
class CustomJSONField(forms.JSONField):
|
||||||
|
widget = widgets.Input
|
||||||
|
|
||||||
|
field = CustomJSONField()
|
||||||
|
self.assertIsInstance(field.widget, widgets.Input)
|
||||||
|
|
Loading…
Reference in New Issue