Fixed #29860 -- Allowed BaseValidator to accept a callable limit_value.
This commit is contained in:
parent
5e3463f6bc
commit
24cae0bedc
|
@ -317,8 +317,9 @@ class BaseValidator:
|
||||||
|
|
||||||
def __call__(self, value):
|
def __call__(self, value):
|
||||||
cleaned = self.clean(value)
|
cleaned = self.clean(value)
|
||||||
params = {'limit_value': self.limit_value, 'show_value': cleaned, 'value': value}
|
limit_value = self.limit_value() if callable(self.limit_value) else self.limit_value
|
||||||
if self.compare(cleaned, self.limit_value):
|
params = {'limit_value': limit_value, 'show_value': cleaned, 'value': value}
|
||||||
|
if self.compare(cleaned, limit_value):
|
||||||
raise ValidationError(self.message, code=self.code, params=params)
|
raise ValidationError(self.message, code=self.code, params=params)
|
||||||
|
|
||||||
def __eq__(self, other):
|
def __eq__(self, other):
|
||||||
|
|
|
@ -236,7 +236,12 @@ to, or in lieu of custom ``field.clean()`` methods.
|
||||||
.. class:: MaxValueValidator(limit_value, message=None)
|
.. class:: MaxValueValidator(limit_value, message=None)
|
||||||
|
|
||||||
Raises a :exc:`~django.core.exceptions.ValidationError` with a code of
|
Raises a :exc:`~django.core.exceptions.ValidationError` with a code of
|
||||||
``'max_value'`` if ``value`` is greater than ``limit_value``.
|
``'max_value'`` if ``value`` is greater than ``limit_value``, which may be
|
||||||
|
a callable.
|
||||||
|
|
||||||
|
.. versionchanged:: 2.2
|
||||||
|
|
||||||
|
``limit_value`` can now be a callable.
|
||||||
|
|
||||||
``MinValueValidator``
|
``MinValueValidator``
|
||||||
---------------------
|
---------------------
|
||||||
|
@ -244,7 +249,12 @@ to, or in lieu of custom ``field.clean()`` methods.
|
||||||
.. class:: MinValueValidator(limit_value, message=None)
|
.. class:: MinValueValidator(limit_value, message=None)
|
||||||
|
|
||||||
Raises a :exc:`~django.core.exceptions.ValidationError` with a code of
|
Raises a :exc:`~django.core.exceptions.ValidationError` with a code of
|
||||||
``'min_value'`` if ``value`` is less than ``limit_value``.
|
``'min_value'`` if ``value`` is less than ``limit_value``, which may be a
|
||||||
|
callable.
|
||||||
|
|
||||||
|
.. versionchanged:: 2.2
|
||||||
|
|
||||||
|
``limit_value`` can now be a callable.
|
||||||
|
|
||||||
``MaxLengthValidator``
|
``MaxLengthValidator``
|
||||||
----------------------
|
----------------------
|
||||||
|
@ -252,7 +262,12 @@ to, or in lieu of custom ``field.clean()`` methods.
|
||||||
.. class:: MaxLengthValidator(limit_value, message=None)
|
.. class:: MaxLengthValidator(limit_value, message=None)
|
||||||
|
|
||||||
Raises a :exc:`~django.core.exceptions.ValidationError` with a code of
|
Raises a :exc:`~django.core.exceptions.ValidationError` with a code of
|
||||||
``'max_length'`` if the length of ``value`` is greater than ``limit_value``.
|
``'max_length'`` if the length of ``value`` is greater than
|
||||||
|
``limit_value``, which may be a callable.
|
||||||
|
|
||||||
|
.. versionchanged:: 2.2
|
||||||
|
|
||||||
|
``limit_value`` can now be a callable.
|
||||||
|
|
||||||
``MinLengthValidator``
|
``MinLengthValidator``
|
||||||
----------------------
|
----------------------
|
||||||
|
@ -260,7 +275,12 @@ to, or in lieu of custom ``field.clean()`` methods.
|
||||||
.. class:: MinLengthValidator(limit_value, message=None)
|
.. class:: MinLengthValidator(limit_value, message=None)
|
||||||
|
|
||||||
Raises a :exc:`~django.core.exceptions.ValidationError` with a code of
|
Raises a :exc:`~django.core.exceptions.ValidationError` with a code of
|
||||||
``'min_length'`` if the length of ``value`` is less than ``limit_value``.
|
``'min_length'`` if the length of ``value`` is less than ``limit_value``,
|
||||||
|
which may be a callable.
|
||||||
|
|
||||||
|
.. versionchanged:: 2.2
|
||||||
|
|
||||||
|
``limit_value`` can now be a callable.
|
||||||
|
|
||||||
``DecimalValidator``
|
``DecimalValidator``
|
||||||
--------------------
|
--------------------
|
||||||
|
|
|
@ -259,7 +259,9 @@ URLs
|
||||||
Validators
|
Validators
|
||||||
~~~~~~~~~~
|
~~~~~~~~~~
|
||||||
|
|
||||||
* ...
|
* :class:`.MaxValueValidator`, :class:`.MinValueValidator`,
|
||||||
|
:class:`.MinLengthValidator`, and :class:`.MaxLengthValidator` now accept
|
||||||
|
a callable ``limit_value``.
|
||||||
|
|
||||||
.. _backwards-incompatible-2.2:
|
.. _backwards-incompatible-2.2:
|
||||||
|
|
||||||
|
|
|
@ -203,6 +203,10 @@ TEST_DATA = [
|
||||||
(MinValueValidator(0), -1, ValidationError),
|
(MinValueValidator(0), -1, ValidationError),
|
||||||
(MinValueValidator(NOW), NOW - timedelta(days=1), ValidationError),
|
(MinValueValidator(NOW), NOW - timedelta(days=1), ValidationError),
|
||||||
|
|
||||||
|
# limit_value may be a callable.
|
||||||
|
(MinValueValidator(lambda: 1), 0, ValidationError),
|
||||||
|
(MinValueValidator(lambda: 1), 1, None),
|
||||||
|
|
||||||
(MaxLengthValidator(10), '', None),
|
(MaxLengthValidator(10), '', None),
|
||||||
(MaxLengthValidator(10), 10 * 'x', None),
|
(MaxLengthValidator(10), 10 * 'x', None),
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue