Commit f2c0eb19 authored by Charlie Denton's avatar Charlie Denton Committed by Tim Graham
Browse files

Fixed #26748 -- Allowed overriding JSONField's widget with an attribute.

parent 57eb17b8
Loading
Loading
Loading
Loading
+1 −4
Original line number Diff line number Diff line
@@ -15,10 +15,7 @@ class JSONField(forms.CharField):
    default_error_messages = {
        'invalid': _("'%(value)s' value must be valid JSON."),
    }

    def __init__(self, **kwargs):
        kwargs.setdefault('widget', forms.Textarea)
        super(JSONField, self).__init__(**kwargs)
    widget = forms.Textarea

    def to_python(self, value):
        if value in self.empty_values:
+19 −1
Original line number Diff line number Diff line
@@ -3,7 +3,7 @@ import unittest

from django.core import exceptions, serializers
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.utils.html import escape

@@ -291,3 +291,21 @@ class TestFormField(PostgreSQLTestCase):
        form = JsonForm({'name': 'xy', 'jfield': '{"foo"}'})
        # Appears once in the textarea and once in the error message
        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)