#7064 closed (fixed)
Decimal validation doesn't correctly handle max_digits == decimal_places
Reported by: | Craig Ogg | Owned by: | Karen Tracey |
---|---|---|---|
Component: | Validators | Version: | dev |
Severity: | Keywords: | decimal validation | |
Cc: | Triage Stage: | Accepted | |
Has patch: | yes | Needs documentation: | no |
Needs tests: | no | Patch needs improvement: | no |
Easy pickings: | no | UI/UX: | no |
Description
If you have a decimal field defined in a model with max_digits and decimal_places set to the same value (for values 0 <= |n| < 1), you will get the following error message incorrectly when you enter any valid value:
- Please enter a valid decimal number with a whole part of at most 0 digits.
You will also get the following error message incorrectly if the number you enter has decimal_places number of digits:
- Please enter a valid decimal number with at most %s total digits.
This is because the leading 0 that str() produces is considered a digit in the validation code (e.g., .35 and 0.35 are treated as 3 digit numbers, with 0 as a digit in the "whole part").
Attachments (2)
Change History (7)
by , 16 years ago
Attachment: | fix-decimal-validation.diff added |
---|
comment:1 by , 16 years ago
Needs tests: | set |
---|---|
Patch needs improvement: | set |
Triage Stage: | Unreviewed → Accepted |
The patch should include a test that demostrates this behaviour (and that it's solved). I'll upload it in a while if you don't mind.
comment:3 by , 16 years ago
Owner: | changed from | to
---|---|
Status: | new → assigned |
The code involved here is gone now but the problem still exists in form validation. max_digits == decimal_places is perfectly valid at the database level so Django should support it. As it is now you cannot bring up an existing valid decimal field defined in this way to the DB and simply re-save it using the admin interface.
comment:4 by , 16 years ago
Resolution: | → fixed |
---|---|
Status: | assigned → closed |
Corrected patch