首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何限制Django DecimalField中的值?

如何限制Django DecimalField中的值?
EN

Stack Overflow用户
提问于 2011-06-25 05:22:24
回答 2查看 1.7K关注 0票数 1

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

目前我的表单代码是:

代码语言:javascript
运行
复制
class OrderForm(ModelForm):
    class Meta:
        model = Order
        fields = ('stock', 'order', 'volume', 'price')

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-06-25 05:28:19

代码语言:javascript
运行
复制
class OrderForm(ModelForm):
    price = forms.ChoiceField(choices=PRICE_CHOICES)

其中PRICE_CHOICES是元组的元组,其形式为:

代码语言:javascript
运行
复制
PRICE_CHOICES = (
    (value, display),
    (value, display),
    ...
)

实际上,由于您正在处理线性级数,您甚至可以使用一些语法糖:

代码语言:javascript
运行
复制
price_choices = [('%.2f' % (x*0.1), '$%.2f' % (x*0.1)) for x in range(0,11)]

唯一的区别是我在显示值前面抛出了一个美元符号,但您得到了要点。

票数 4
EN

Stack Overflow用户

发布于 2011-06-25 05:51:47

我的方法是,在表单的init方法中修改自动生成的字段,方法是添加一个验证器来检查表单字段的值是否在您想要的范围内。

代码语言:javascript
运行
复制
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)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6473895

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档