Commit d58aaa24 authored by Akshesh's avatar Akshesh Committed by Tim Graham
Browse files

Fixed #26107 -- Added option to int_list_validator() to allow negative integers.

parent b954ad06
Loading
Loading
Loading
Loading
+5 −2
Original line number Diff line number Diff line
@@ -283,8 +283,11 @@ def ip_address_validators(protocol, unpack_ipv4):
                         % (protocol, list(ip_address_validator_map)))


def int_list_validator(sep=',', message=None, code='invalid'):
    regexp = _lazy_re_compile('^\d+(?:%s\d+)*\Z' % re.escape(sep))
def int_list_validator(sep=',', message=None, code='invalid', allow_negative=False):
    regexp = _lazy_re_compile('^%(neg)s\d+(?:%(sep)s%(neg)s\d+)*\Z' % {
        'neg': '(-)?' if allow_negative else '',
        'sep': re.escape(sep),
    })
    return RegexValidator(regexp, message=message, code=code)


+8 −3
Original line number Diff line number Diff line
@@ -226,12 +226,17 @@ to, or in lieu of custom ``field.clean()`` methods.
``int_list_validator``
----------------------

.. function:: int_list_validator(sep=',', message=None, code='invalid')
.. function:: int_list_validator(sep=',', message=None, code='invalid', allow_negative=False)

    .. versionadded:: 1.9

    Returns a :class:`RegexValidator` instance that ensures a string
    consists of integers separated by ``sep``.
    Returns a :class:`RegexValidator` instance that ensures a string consists
    of integers separated by ``sep``. It allows negative integers when
    ``allow_negative`` is ``True``.

    .. versionchanged:: 1.10

        The ``allow_negative`` parameter was added.

``MaxValueValidator``
---------------------
+4 −0
Original line number Diff line number Diff line
@@ -355,6 +355,10 @@ Validators
  domain name labels to 63 characters and the total length of domain
  names to 253 characters per :rfc:`1034`.

* :func:`~django.core.validators.int_list_validator` now accepts an optional
  ``allow_negative`` boolean parameter, defaulting to ``False``, to allow
  negative integers.

Backwards incompatible changes in 1.10
======================================

+5 −0
Original line number Diff line number Diff line
@@ -172,6 +172,11 @@ TEST_DATA = [
    (validate_comma_separated_integer_list, '1,,2', ValidationError),

    (int_list_validator(sep='.'), '1.2.3', None),
    (int_list_validator(sep='.', allow_negative=True), '1.2.3', None),
    (int_list_validator(allow_negative=True), '-1,-2,3', None),
    (int_list_validator(allow_negative=True), '1,-2,-12', None),

    (int_list_validator(), '-1,2,3', ValidationError),
    (int_list_validator(sep='.'), '1,2,3', ValidationError),
    (int_list_validator(sep='.'), '1.2.3\n', ValidationError),