Django Float Field input

13,611

Solution 1

You can do this by including NumberInput with your form widget and setting step attribute

homework = forms.FloatField(required=False, max_value=10, min_value=0, 
widget=forms.NumberInput(attrs={'id': 'form_homework', 'step': "0.01"})) 

Difference from above answer is missing forms reference with NumberInput of form

Solution 2

Just specify "step" attribute as a widget attribute, this way:

homework = forms.FloatField(required=False, max_value=10, min_value=0, widget=NumberInput(attrs={'id': 'form_homework', 'step': "0.01"}))

Solution 3

You can also do this by including TextInput with your form widget

homework = forms.FloatField(required=False, widget=forms.TextInput(
       attrs={'type': 'number','id':'form_homework','min': '0','max':'10','step':'0.01'}))
Share:
13,611

Related videos on Youtube

Alejandro Veintimilla
Author by

Alejandro Veintimilla

I am an economist that decided to study programming languages for web development. So, I have been learning python for 10 months and recently started learning django.

Updated on July 13, 2022

Comments

  • Alejandro Veintimilla
    Alejandro Veintimilla almost 2 years

    Which is the best way to create a django form field that accepts floats and has the same functionality as a NumberInput? What I mean with same functionality is that django's NumberInput has arrows right next to the input that can increase or decrease the number and it also accepts min_value and max_value. If I use a TextInput widget I won't get this functionality. If I use NumberInput widget it wont work with floats:

    homework = forms.FloatField(required=False, max_value=10, min_value=0, widget=NumberInput(attrs={'id': 'form_homework'}))
    

    enter image description here

    It doesn't include floats (i.e 5.5) when I click the + - buttons. Also, it doesn't show the float at all if I want to set the actual float (the homework's grade) as an initial value (using Jquery).

    Any advice is welcome.

    EDIT:

    If I do:

    class NumberInput(TextInput):
        input_type = 'number'
    
    homework = forms.FloatField(required=False, max_value=10, min_value=0,
        widget=NumberInput(attrs={'id': 'form_homework', 'step': '0.1'}))
    

    The 'step' attribute works but the max_value/min_value doesn't. If I do not define NumberInput that way and use the regular NumberInput, it doesn't work at all.

  • Alejandro Veintimilla
    Alejandro Veintimilla over 9 years
    Thanks for your answer, It doesn't work though. Please look at the Edit.
  • thespacecamel
    thespacecamel almost 7 years
    I think @matagus was suggesting to use django.forms.NumberInput, not create your own input with that name.
  • Pixel
    Pixel over 4 years
    For anyone wondering on @thespacecamel that means editing the code to look as follows - widget=forms.NumberInput(attrs=