如何限制Django DecimalField中的值?

时间:2011-06-24 21:22:24

标签: django django-models django-forms

我有一个带有price字段的订单模型。我想让我的表单将此字段限制在0.0到1.0之间的值,但我不希望实际模型受此限制。

目前我的表单代码是:

class OrderForm(ModelForm):
    class Meta:
        model = Order
        fields = ('stock', 'order', 'volume', 'price')

下拉输入是理想的,但我不知道如何通过Django表单来实现。

2 个答案:

答案 0 :(得分:4)

class OrderForm(ModelForm):
    price = forms.ChoiceField(choices=PRICE_CHOICES)

PRICE_CHOICES是元组元组的形式:

PRICE_CHOICES = (
    (value, display),
    (value, display),
    ...
)

实际上,既然你正在处理线性进展,你甚至可以使用一些语法糖:

price_choices = [('%.2f' % (x*0.1), '$%.2f' % (x*0.1)) for x in range(0,11)]

唯一的区别是我在显示值前面抛出一个美元符号,但你明白了。

答案 1 :(得分:1)

我这样做的方法是,在我的表单的init方法中,通过向其附加一个验证器来修改自动生成的字段,该验证器检查表单字段的值是否在您想要的范围内。

Class OrderForm(forms.ModelForm):
   def __init__(*arg, **kwargs):
    super(OrderForm,self).__init__(*args, **kwargs)
    self.fields['price'].validators = [valid_price_range]


def valid_price_range(value):
    if value < 0 or value > 1:
       throw ValidationError(u'%s is not between 0 and 1' % value)