你怎么使django十进制字段小部件(numberinput)增量不同

时间:2015-07-29 04:03:48

标签: python django widget

我允许有人为他的披萨配料设定价格,我有一个简单的表格,这是默认的DecimalField小部件

models.py:

class Topping(models.Model):
    title       = models.CharField(max_length=60)
    description = models.CharField(max_length=50, blank=True, null=True)
    price       = models.DecimalField(max_digits=4, decimal_places=2, default=0.00)

forms.py:

class ToppingForm(forms.ModelForm):
    class Meta:
        model = Topping
        fields = ('title', 'price')

截至目前,小部件允许单击向上或向下以增加价格,但默认为0.01或一分钱。这没用,我希望他们一次能够跳25美分。我不知道我是否正在阅读错误的github,但是源代码没有显示任何兴趣,比如设置增量的关键字arg:

https://github.com/django/django/blob/master/django/forms/widgets.py

class TextInput(Input):
    input_type = 'text'

    def __init__(self, attrs=None):
        if attrs is not None:
            self.input_type = attrs.pop('type', self.input_type)
        super(TextInput, self).__init__(attrs)


class NumberInput(TextInput):
    input_type = 'number'

谢谢

enter image description here

2 个答案:

答案 0 :(得分:10)

我认为您可以通过将step属性添加到NumberInput小部件来实现此目的。

class ToppingForm(forms.ModelForm):
    class Meta:
        model = Topping
        fields = ('title', 'price')
        widgets = {
            'price': forms.NumberInput(attrs={'step': 0.25}),
        }

答案 1 :(得分:0)

@ codyc4321 两个小数位,在models.py中定义:

YOUR_VAR = models.DecimalField(decimal_places=2, max_digits=4, blank=True, null=True)