2011-06-24 40 views
1

我有一个price字段的订单模型。我希望我的表单将此字段限制为0.0到1.0之间的值,但我不希望实际模型受限于此。如何限制Django DecimalField中的值?

目前我的表单代码:

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

一个下拉输入将是理想的,但我不知道如何实现这一目标,通过Django的形式。

回答

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

我这样做的方式是,在我的表单的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)