2017-05-17 43 views
0

我想在Django中设置FloatField的最小值,以便表单字段不接受负值。在整数的情况下,我将数据类型更改为PositiveIntegerField,但最小值在float域中不起作用。validators = [MinValueValidator]在Django中不起作用

from django.core.validators import MaxValueValidator, MinValueValidator 

max_discount = models.FloatField(verbose_name=u'Maximum Discount', validators = [MinValueValidator(0.0)]) 
+0

您的'max_discount'字段看起来不错。 “'不起作用'是什么意思?你想做什么,你期望会发生什么,会发生什么? – Alasdair

+0

我刚刚意识到验证器在表单提交时工作,但我希望字段不允许像PositiveIntegerField那样输入负值。 –

回答

0

我曾经做过这样的同样的事情,

from django.db import models 
from django.core.validators import MinValueValidator, MaxValueValidator 

class Coupon(models.Model): 
    code = models.CharField(max_length=50, 
           unique=True) 
    valid_from = models.DateTimeField() 
    valid_to = models.DateTimeField() 
    discount = models.IntegerField(
         validators=[MinValueValidator(0), 
            MaxValueValidator(100)]) 
    active = models.BooleanField() 
    def __str__(self): 
     return self.code 

我已经设置这样的优惠码,

discount = models.IntegerField(
          validators=[MinValueValidator(0), 
             MaxValueValidator(100)]) 

折扣:折扣率应用(这是一个百分比,所以它取值从0到100)。我们使用此字段的验证器来限制最小和最大接受值。

你可以尝试这种方式可能会为你工作。

谢谢。

+0

验证器既不能用整数字段也不能用floatfield。我不知道这个问题是什么。 –

+0

@ManpreetAhluwalia,你运行你是一个项目与“virtualenv”?如果没有,那么使用这个来保护你的项目目录。有时这会导致问题。我经历过很多次。它可能会自动解决您的问题。谢谢。 –

+0

我刚刚意识到验证器在表单提交时工作,但我希望字段不允许像PositiveIntegerField那样输入负值。 –

0

您的代码:

from django.core.validators import MaxValueValidator, MinValueValidator 

max_discount = models.FloatField(verbose_name=u'Maximum Discount', validators = [MinValueValidator(0.0)]) 

看起来不错。 你应该注意到虽然这

验证不会自动在保存模式运行,但如果 您正在使用的ModelForm,它将对包含在表单的任何字段 运行验证。

查看docs了解更多信息。

您可以在表单中添加某种HTML属性验证过,例如:

<input type="number" min="0.0"> 

到你的服务器端验证。

编辑

如果您的窗体域是在管理界面可以自定义该字段的小部件(基本HTML)。您可以看到here如何将自定义小部件添加到管理界面中的字段。

+0

ooooo ...如果表单被提交,是否会出现验证信息? 但我希望该字段不允许像PositiveIntegerField那样输入负值。 –

+0

@ManpreetAhluwalia我已经更新了答案 – doru

+0

没有模板我正在Django管理界面上工作。 –