I just upgraded to django 2.2 and found our custom max value validator for
current year + 1 (which gave us a migration on the year change) and
thought to replace it with the new mechanic.
The result was the following error:
```
File "<venv>/lib/python3.6/site-
packages/django/db/models/fields/__init__.py", line 1799, in <genexpr>
validator.limit_value <= max_value for validator in validators_)):
```
So the field wants to check that the validator's max (and min) value lie
within range of the Integer field which is not possible with the callable.
The fix should be simple: Check if it's a callable and call it for the
value.
--
Ticket URL: <https://code.djangoproject.com/ticket/30328>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.
Old description:
> in #29860 for django 2.2 the option was added to pass in a callable.
>
> I just upgraded to django 2.2 and found our custom max value validator
> for current year + 1 (which gave us a migration on the year change) and
> thought to replace it with the new mechanic.
>
> The result was the following error:
> ```
> File "<venv>/lib/python3.6/site-
> packages/django/db/models/fields/__init__.py", line 1799, in <genexpr>
> validator.limit_value <= max_value for validator in validators_)):
> ```
>
> So the field wants to check that the validator's max (and min) value lie
> within range of the Integer field which is not possible with the
> callable.
>
> The fix should be simple: Check if it's a callable and call it for the
> value.
New description:
in #29860 for django 2.2 the option was added to pass in a callable.
I just upgraded to django 2.2 and found our custom max value validator for
current year + 1 (which gave us a migration on the year change) and
thought to replace it with the new mechanic.
The result was the following error:
`
File "<venv>/lib/python3.6/site-
packages/django/db/models/fields/__init__.py", line 1799, in <genexpr>
validator.limit_value <= max_value for validator in validators_)):
`
So the field wants to check that the validator's max (and min) value lie
within range of the Integer field which is not possible with the callable.
The fix should be simple: Check if it's a callable and call it for the
value.
--
--
Ticket URL: <https://code.djangoproject.com/ticket/30328#comment:1>
Old description:
> in #29860 for django 2.2 the option was added to pass in a callable.
>
> I just upgraded to django 2.2 and found our custom max value validator
> for current year + 1 (which gave us a migration on the year change) and
> thought to replace it with the new mechanic.
>
> The result was the following error:
> `
> File "<venv>/lib/python3.6/site-
> packages/django/db/models/fields/__init__.py", line 1799, in <genexpr>
> validator.limit_value <= max_value for validator in validators_)):
> `
>
> So the field wants to check that the validator's max (and min) value lie
> within range of the Integer field which is not possible with the
> callable.
>
> The fix should be simple: Check if it's a callable and call it for the
> value.
New description:
in #29860 for django 2.2 the option was added to pass in a callable.
I just upgraded to django 2.2 and found our custom max value validator for
current year + 1 (which gave us a migration on the year change) and
thought to replace it with the new mechanic.
The result was the following error:
{{{
File "<venv>/lib/python3.6/site-
packages/django/db/models/fields/__init__.py", line 1799, in <genexpr>
validator.limit_value <= max_value for validator in validators_)):
}}}
So the field wants to check that the validator's max (and min) value lie
within range of the Integer field which is not possible with the callable.
The fix should be simple: Check if it's a callable and call it for the
value.
--
--
Ticket URL: <https://code.djangoproject.com/ticket/30328#comment:2>
Comment (by Harro):
Should add that it only fails if the database backend has limits (sqlite
does not)
--
Ticket URL: <https://code.djangoproject.com/ticket/30328#comment:3>
* stage: Unreviewed => Accepted
* severity: Normal => Release blocker
Comment:
Reproduced at 1ffddfc233e2d5139cc6ec31a4ec6ef70b10f87f.
Regression in 24cae0bedc51093b363c323af555946a8edea1a1.
Thanks for the report!
--
Ticket URL: <https://code.djangoproject.com/ticket/30328#comment:4>
* owner: nobody => scottfits
* status: new => assigned
--
Ticket URL: <https://code.djangoproject.com/ticket/30328#comment:5>
* has_patch: 0 => 1
Comment:
[https://github.com/django/django/pull/11180 PR]
--
Ticket URL: <https://code.djangoproject.com/ticket/30328#comment:6>
* needs_better_patch: 0 => 1
* needs_tests: 0 => 1
--
Ticket URL: <https://code.djangoproject.com/ticket/30328#comment:7>
* status: assigned => closed
* resolution: => fixed
Comment:
In [changeset:"a14c0fda15db7e0eb982ac7b68d47b45fc95b4cb" a14c0fd]:
{{{
#!CommitTicketReference repository=""
revision="a14c0fda15db7e0eb982ac7b68d47b45fc95b4cb"
Fixed #30328 -- Fixed crash of IntegerField.validators when limit_value in
a custom validator is callable.
}}}
--
Ticket URL: <https://code.djangoproject.com/ticket/30328#comment:8>
Comment (by Mariusz Felisiak <felisiak.mariusz@…>):
In [changeset:"95811c3de9334c313522982c3d125a8c2ff7ab72" 95811c3d]:
{{{
#!CommitTicketReference repository=""
revision="95811c3de9334c313522982c3d125a8c2ff7ab72"
[2.2.x] Fixed #30328 -- Fixed crash of IntegerField.validators when
limit_value in a custom validator is callable.
Backport of a14c0fda15db7e0eb982ac7b68d47b45fc95b4cb from master
}}}
--
Ticket URL: <https://code.djangoproject.com/ticket/30328#comment:9>