djangodjango-formsdjango-validation

"int_list_validator" is not working in Django forms


I made the following Django form.

from django.core.validators import int_list_validator

class RoomForm(forms. Form):
    room_numbers = forms.CharField(validators=[int_list_validator], required=False, max_length=4000)

In this form even if I submit a string like 'hello' the form gets submitted. I mean I can get the value 'hello' in views.py. I don't understand why because "int_list_validator" should not allow it.


Solution

  • Unfortunate naming: int_list_validator is not a validator but a helper function that creates one.

    validate_comma_separated_integer_list is a validator, created by calling int_list_validator with a more suitable message than the default _("Enter a valid value."):

    validate_comma_separated_integer_list = int_list_validator(
        message=_("Enter only digits separated by commas."),
    )
    

    Usage:

    from django import forms
    from django.core.validators import int_list_validator, validate_comma_separated_integer_list
    
    
    # room_numbers = forms.CharField(validators=[int_list_validator], required=False, max_length=4000)
    room_numbers = forms.CharField(validators=[int_list_validator()], required=False, max_length=4000)
    
    # Or
    room_numbers = forms.CharField(validators=[validate_comma_separated_integer_list], required=False, max_length=4000)