Opened 7 years ago

Closed 7 years ago

Last modified 7 years ago

#7064 closed (fixed)

Decimal validation doesn't correctly handle max_digits == decimal_places

Reported by: cogg Owned by: kmtracey
Component: Validators Version: master
Severity: Keywords: decimal validation
Cc: Triage Stage: Accepted
Has patch: yes Needs documentation: no
Needs tests: no Patch needs improvement: no
Easy pickings: UI/UX:

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)

fix-decimal-validation.diff (547 bytes) - added by cogg 7 years ago.
Corrected patch
7064.diff (968 bytes) - added by telenieko 7 years ago.
added test.

Download all attachments as: .zip

Change History (7)

Changed 7 years ago by cogg

Corrected patch

comment:1 Changed 7 years ago by telenieko

  • Needs documentation unset
  • Needs tests set
  • Patch needs improvement set
  • Triage Stage changed from Unreviewed to 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.

Changed 7 years ago by telenieko

added test.

comment:2 Changed 7 years ago by telenieko

  • Needs tests unset
  • Patch needs improvement unset

Added a test case.

comment:3 Changed 7 years ago by kmtracey

  • Owner changed from cogg to kmtracey
  • Status changed from new to 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 Changed 7 years ago by kmtracey

  • Resolution set to fixed
  • Status changed from assigned to closed

(In [9387]) Fixed #7064: Made DemicmalField validation support max_digits equal to decimal_places.

comment:5 Changed 7 years ago by kmtracey

(In [9389]) [1.0.X] Fixed #7064: Made DemicmalField validation support max_digits equal to decimal_places.

r9387 and r9388 from trunk.

Note: See TracTickets for help on using tickets.
Back to Top