Opened 9 months ago

Closed 9 months ago

#35304 closed Uncategorized (invalid)

IntegerField trailing decimal and zeros

Reported by: Piotr Kotarba Owned by: nobody
Component: Forms Version: 5.0
Severity: Normal Keywords:
Cc: Triage Stage: Unreviewed
Has patch: no Needs documentation: no
Needs tests: no Patch needs improvement: no
Easy pickings: no UI/UX: no

Description

I have a little concern in regard of stripping trailing decimal and zeros.

IntegerField Uses NumberInput as widget, which allows to pass Numbers with trailing zeros.
For example, below numbers are valid:
10
10.00
10,00

Shouldn't IntegerField accept only Integers?

Below method uses _lazy_re_compile to get rid of them.

    def to_python(self, value):
        """
        Validate that int() can be called on the input. Return the result
        of int() or None for empty values.
        """
        value = super().to_python(value)
        if value in self.empty_values:
            return None
        if self.localize:
            value = formats.sanitize_separators(value)
        # Strip trailing decimal and zeros.
        try:
            value = int(self.re_decimal.sub('', str(value)))
        except (ValueError, TypeError):
            raise ValidationError(self.error_messages['invalid'], code='invalid')
        return value

I have found related issue:
https://code.djangoproject.com/ticket/24229

The reason of this functionality as I understand was:
"Django forms are useful for validating user input beyond just HTML forms."
"One issue, MS Excel represents all numbers in cells as floats, even integers. So for this to work, a float with value 1.0 should be cleaned by forms.IntegerField as 1. "

I am sceptic to this solution, and as Django main purpose is to be used on HTML, it shouldn't have such functionality in its core.
Also I think that this issue was created when there was no inputs, and HTML looked different as well. Lots have changed since then.

What do you think?

Change History (1)

comment:1 by David Sanders, 9 months ago

Resolution: invalid
Status: newclosed

Hi there 👋

Trac is for reporting bugs with Django. If you just want to start a discussion on something you'll need to head over to Discord or the Forum, details here: https://www.djangoproject.com/community/

Thanks!

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