2
0
Эх сурвалжийг харах

Refs #31026 -- Removed ability to return string when rendering ErrorDict/ErrorList.

Per deprecation timeline.
Mariusz Felisiak 2 жил өмнө
parent
commit
31878b4d73

+ 0 - 12
django/forms/forms.py

@@ -4,16 +4,13 @@ Form classes
 
 import copy
 import datetime
-import warnings
 
 from django.core.exceptions import NON_FIELD_ERRORS, ValidationError
 from django.forms.fields import Field, FileField
 from django.forms.utils import ErrorDict, ErrorList, RenderableFormMixin
 from django.forms.widgets import Media, MediaDefiningClass
 from django.utils.datastructures import MultiValueDict
-from django.utils.deprecation import RemovedInDjango50Warning
 from django.utils.functional import cached_property
-from django.utils.safestring import SafeString, mark_safe
 from django.utils.translation import gettext as _
 
 from .renderers import get_default_renderer
@@ -238,15 +235,6 @@ class BaseForm(RenderableFormMixin):
                 hidden_fields.append(bf)
             else:
                 errors_str = str(bf_errors)
-                # RemovedInDjango50Warning.
-                if not isinstance(errors_str, SafeString):
-                    warnings.warn(
-                        f"Returning a plain string from "
-                        f"{self.error_class.__name__} is deprecated. Please "
-                        f"customize via the template system instead.",
-                        RemovedInDjango50Warning,
-                    )
-                    errors_str = mark_safe(errors_str)
                 fields.append((bf, errors_str))
         return {
             "form": self,

+ 0 - 5
docs/ref/forms/api.txt

@@ -1015,11 +1015,6 @@ Customizing the error list format
     overriding the default template, see also
     :ref:`overriding-built-in-form-templates`.
 
-.. deprecated:: 4.0
-
-    The ability to return a ``str`` when calling the ``__str__`` method is
-    deprecated. Use the template engine instead which returns a ``SafeString``.
-
 More granular output
 ====================
 

+ 3 - 0
docs/releases/5.0.txt

@@ -299,6 +299,9 @@ to remove usage of these features.
 
 * The undocumented ``BaseForm._html_output()`` method is removed.
 
+* The ability to return a ``str``, rather than a ``SafeString``, when rendering
+  an ``ErrorDict`` and ``ErrorList`` is removed.
+
 See :ref:`deprecated-features-4.1` for details on these changes, including how
 to remove usage of these features.
 

+ 0 - 55
tests/forms_tests/tests/test_deprecation_forms.py

@@ -1,55 +0,0 @@
-# RemovedInDjango50
-from django.forms import CharField, EmailField, Form
-from django.forms.utils import ErrorList
-from django.test import SimpleTestCase, ignore_warnings
-from django.utils.deprecation import RemovedInDjango50Warning
-
-
-class DivErrorList(ErrorList):
-    def __str__(self):
-        return self.as_divs()
-
-    def as_divs(self):
-        if not self:
-            return ""
-        return '<div class="errorlist">%s</div>' % "".join(
-            f'<div class="error">{error}</div>' for error in self
-        )
-
-
-class DeprecationTests(SimpleTestCase):
-    def test_deprecation_warning_error_list(self):
-        class EmailForm(Form):
-            email = EmailField()
-            comment = CharField()
-
-        data = {"email": "invalid"}
-        f = EmailForm(data, error_class=DivErrorList)
-        msg = (
-            "Returning a plain string from DivErrorList is deprecated. Please "
-            "customize via the template system instead."
-        )
-        with self.assertRaisesMessage(RemovedInDjango50Warning, msg):
-            f.as_p()
-
-
-@ignore_warnings(category=RemovedInDjango50Warning)
-class DeprecatedTests(SimpleTestCase):
-    def test_errorlist_override_str(self):
-        class CommentForm(Form):
-            name = CharField(max_length=50, required=False)
-            email = EmailField()
-            comment = CharField()
-
-        data = {"email": "invalid"}
-        f = CommentForm(data, auto_id=False, error_class=DivErrorList)
-        self.assertHTMLEqual(
-            f.as_p(),
-            '<p>Name: <input type="text" name="name" maxlength="50"></p>'
-            '<div class="errorlist">'
-            '<div class="error">Enter a valid email address.</div></div>'
-            '<p>Email: <input type="email" name="email" value="invalid" required></p>'
-            '<div class="errorlist">'
-            '<div class="error">This field is required.</div></div>'
-            '<p>Comment: <input type="text" name="comment" required></p>',
-        )