2017-05-17 82 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管理界面上工作。 –