我有一个带有price
字段的订单模型。我想让我的表单将此字段限制在0.0到1.0之间的值,但我不希望实际模型受此限制。
目前我的表单代码是:
class OrderForm(ModelForm):
class Meta:
model = Order
fields = ('stock', 'order', 'volume', 'price')
下拉输入是理想的,但我不知道如何通过Django表单来实现。
答案 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)