mirror of
				https://github.com/django/django.git
				synced 2025-11-04 13:39:16 +00:00 
			
		
		
		
	Fixed #23151 -- Deprecated RegexField.error_message.
Thanks Baptiste Mispelon for the suggestion.
This commit is contained in:
		
							parent
							
								
									44169a00c1
								
							
						
					
					
						commit
						0f2ceee025
					
				
					 6 changed files with 31 additions and 8 deletions
				
			
		| 
						 | 
					@ -8,8 +8,11 @@ class FlatpageForm(forms.ModelForm):
 | 
				
			||||||
    url = forms.RegexField(label=_("URL"), max_length=100, regex=r'^[-\w/\.~]+$',
 | 
					    url = forms.RegexField(label=_("URL"), max_length=100, regex=r'^[-\w/\.~]+$',
 | 
				
			||||||
        help_text=_("Example: '/about/contact/'. Make sure to have leading"
 | 
					        help_text=_("Example: '/about/contact/'. Make sure to have leading"
 | 
				
			||||||
                    " and trailing slashes."),
 | 
					                    " and trailing slashes."),
 | 
				
			||||||
        error_message=_("This value must contain only letters, numbers,"
 | 
					        error_messages={
 | 
				
			||||||
                        " dots, underscores, dashes, slashes or tildes."))
 | 
					            "invalid": _("This value must contain only letters, numbers,"
 | 
				
			||||||
 | 
					                         " dots, underscores, dashes, slashes or tildes."),
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					    )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    class Meta:
 | 
					    class Meta:
 | 
				
			||||||
        model = FlatPage
 | 
					        model = FlatPage
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -25,7 +25,7 @@ from django.forms.widgets import (
 | 
				
			||||||
from django.utils import formats
 | 
					from django.utils import formats
 | 
				
			||||||
from django.utils.encoding import smart_text, force_str, force_text
 | 
					from django.utils.encoding import smart_text, force_str, force_text
 | 
				
			||||||
from django.utils.ipv6 import clean_ipv6_address
 | 
					from django.utils.ipv6 import clean_ipv6_address
 | 
				
			||||||
from django.utils.deprecation import RemovedInDjango19Warning
 | 
					from django.utils.deprecation import RemovedInDjango19Warning, RemovedInDjango20Warning
 | 
				
			||||||
from django.utils import six
 | 
					from django.utils import six
 | 
				
			||||||
from django.utils.six.moves.urllib.parse import urlsplit, urlunsplit
 | 
					from django.utils.six.moves.urllib.parse import urlsplit, urlunsplit
 | 
				
			||||||
from django.utils.translation import ugettext_lazy as _, ungettext_lazy
 | 
					from django.utils.translation import ugettext_lazy as _, ungettext_lazy
 | 
				
			||||||
| 
						 | 
					@ -531,6 +531,11 @@ class RegexField(CharField):
 | 
				
			||||||
        """
 | 
					        """
 | 
				
			||||||
        # error_message is just kept for backwards compatibility:
 | 
					        # error_message is just kept for backwards compatibility:
 | 
				
			||||||
        if error_message is not None:
 | 
					        if error_message is not None:
 | 
				
			||||||
 | 
					            warnings.warn(
 | 
				
			||||||
 | 
					                "The 'error_message' argument is deprecated. Use "
 | 
				
			||||||
 | 
					                "Field.error_messages['invalid'] instead.",
 | 
				
			||||||
 | 
					                RemovedInDjango20Warning, stacklevel=2
 | 
				
			||||||
 | 
					            )
 | 
				
			||||||
            error_messages = kwargs.get('error_messages') or {}
 | 
					            error_messages = kwargs.get('error_messages') or {}
 | 
				
			||||||
            error_messages['invalid'] = error_message
 | 
					            error_messages['invalid'] = error_message
 | 
				
			||||||
            kwargs['error_messages'] = error_messages
 | 
					            kwargs['error_messages'] = error_messages
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -40,6 +40,8 @@ about each item can often be found in the release notes of two versions prior.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
* ``django.template.resolve_variable`` will be removed.
 | 
					* ``django.template.resolve_variable`` will be removed.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* The ``error_message`` argument of ``django.forms.RegexField`` will be removed.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.. _deprecation-removed-in-1.9:
 | 
					.. _deprecation-removed-in-1.9:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
1.9
 | 
					1.9
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -805,10 +805,13 @@ For each field, we describe the default widget used if you don't specify
 | 
				
			||||||
    Also takes ``max_length`` and ``min_length``, which work just as they do for
 | 
					    Also takes ``max_length`` and ``min_length``, which work just as they do for
 | 
				
			||||||
    ``CharField``.
 | 
					    ``CharField``.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    .. deprecated:: 1.8
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        The optional argument ``error_message`` is also accepted for backwards
 | 
					        The optional argument ``error_message`` is also accepted for backwards
 | 
				
			||||||
    compatibility. The preferred way to provide an error message is to use the
 | 
					        compatibility but will be removed in Django 2.0. The preferred way to
 | 
				
			||||||
    ``error_messages`` argument, passing a dictionary with ``'invalid'`` as a key
 | 
					        provide an error message is to use the :attr:`~Field.error_messages`
 | 
				
			||||||
    and the error message as the value.
 | 
					        argument, passing a dictionary with ``'invalid'`` as a key and the error
 | 
				
			||||||
 | 
					        message as the value.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
``SlugField``
 | 
					``SlugField``
 | 
				
			||||||
~~~~~~~~~~~~~
 | 
					~~~~~~~~~~~~~
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -625,3 +625,9 @@ The function has been informally marked as "Deprecated" for some time. Replace
 | 
				
			||||||
It provided the :ttag:`lorem` template tag which is now included in the
 | 
					It provided the :ttag:`lorem` template tag which is now included in the
 | 
				
			||||||
built-in tags. Simply remove ``'django.contrib.webdesign'`` from
 | 
					built-in tags. Simply remove ``'django.contrib.webdesign'`` from
 | 
				
			||||||
:setting:`INSTALLED_APPS` and ``{% load webdesign %}`` from your templates.
 | 
					:setting:`INSTALLED_APPS` and ``{% load webdesign %}`` from your templates.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					``error_message`` argument to ``django.forms.RegexField``
 | 
				
			||||||
 | 
					~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					It provided backwards compatibility for pre-1.0 code, but its functionality is
 | 
				
			||||||
 | 
					redundant. Use ``Field.error_messages['invalid']`` instead.
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -32,6 +32,7 @@ import re
 | 
				
			||||||
import os
 | 
					import os
 | 
				
			||||||
from decimal import Decimal
 | 
					from decimal import Decimal
 | 
				
			||||||
from unittest import skipIf
 | 
					from unittest import skipIf
 | 
				
			||||||
 | 
					import warnings
 | 
				
			||||||
 | 
					
 | 
				
			||||||
try:
 | 
					try:
 | 
				
			||||||
    from PIL import Image
 | 
					    from PIL import Image
 | 
				
			||||||
| 
						 | 
					@ -630,6 +631,9 @@ class FieldsTests(SimpleTestCase):
 | 
				
			||||||
        self.assertRaisesMessage(ValidationError, "'Enter a valid value.'", f.clean, '2A2 ')
 | 
					        self.assertRaisesMessage(ValidationError, "'Enter a valid value.'", f.clean, '2A2 ')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def test_regexfield_4(self):
 | 
					    def test_regexfield_4(self):
 | 
				
			||||||
 | 
					        # deprecated error_message argument; remove in Django 2.0
 | 
				
			||||||
 | 
					        with warnings.catch_warnings(record=True) as w:
 | 
				
			||||||
 | 
					            warnings.simplefilter("always")
 | 
				
			||||||
            f = RegexField('^[0-9][0-9][0-9][0-9]$', error_message='Enter a four-digit number.')
 | 
					            f = RegexField('^[0-9][0-9][0-9][0-9]$', error_message='Enter a four-digit number.')
 | 
				
			||||||
        self.assertEqual('1234', f.clean('1234'))
 | 
					        self.assertEqual('1234', f.clean('1234'))
 | 
				
			||||||
        self.assertRaisesMessage(ValidationError, "'Enter a four-digit number.'", f.clean, '123')
 | 
					        self.assertRaisesMessage(ValidationError, "'Enter a four-digit number.'", f.clean, '123')
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue