【问题标题】:How to restrict values in a Django DecimalField?如何限制 Django DecimalField 中的值?
【发布时间】:2011-09-22 08:47:52
【问题描述】:
我有一个带有 price 字段的 Order 模型。我想让我的表单将此字段限制为 0.0 到 1.0 之间的值,但我不希望实际模型被这样限制。
目前我的表单代码是:
class OrderForm(ModelForm):
class Meta:
model = Order
fields = ('stock', 'order', 'volume', 'price')
下拉输入是理想的,但我不知道如何通过 Django 表单来实现。
【问题讨论】:
标签:
django
django-models
django-forms
【解决方案1】:
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)]
唯一的区别是我在显示值前面加了一个美元符号,但你明白了。
【解决方案2】:
我这样做的方法是,在我的表单的 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)