无法覆盖Django中NumberInput字段的step属性

4 投票
2 回答
3635 浏览
提问于 2025-04-18 13:17

我正在尝试制作一个数字输入的控件,它的步进值是0.5,也就是每次增加或减少的值是0.5,具体在表单中是这样定义的:

widgets = {
    "hours_per_day": widgets.NumberInput(attrs={'step': '0.5'})
}

但是,模板总是显示步进值为0.1。这个控件是用在ModelForm的DecimalField里的。为什么步进值没有改变呢?

下面是表单中的(有用的)代码:

class Registration_form(ModelForm):
    class Meta:
        model = Registration

        fields = [
            "hours_per_day",
        ]

        widgets = {
            "hours_per_day": widgets.NumberInput(attrs={'step': '1'})
        }

2 个回答

1

你可以使用 forms.NumberInput() 来修改 step 属性,这个属性是 forms.DecimalField() 的一部分。下面是一些示例方法:

from django import forms

class TestForm(forms.ModelForm):
    class Meta:
        widgets = {
            'num': forms.NumberInput(attrs={'step': 0.5})
        }          # Here
from django import forms

class TestForm(forms.ModelForm):
    num = forms.DecimalField(
        widget=forms.NumberInput(attrs={'step': 0.5})
    )          # Here
5

试着把 NumberInput 定义成一个 TextInput,像这样,然后每次增加 0.5

from django.forms.widgets import TextInput

class NumberInput(TextInput):
    input_type = 'number'


#Usage
widgets = (
    'number_field': NumberInput(attrs={'min': '0', 'max': '10', 'step': '0.5'}),

)

撰写回答