2016-04-14 78 views
0

我寫了一個自定義驗證程序,如果給定的字段值爲負值,將引發ValidationError。Django自定義驗證程序不能正常工作

def validate_positive(value): 
     if value < 0: 
      raise ValidationError(
        _('%(value) is negative number'), 
        params = {'value': value} 
        ) 

我通過現場的驗證參數

class Book(models.Model): 
    user = models.ForeignKey(User,on_delete=models.CASCADE) 
    title = models.CharField(max_length=50) 
    price = models.IntegerField(default=0,validators=[validate_positive]) 
    quantity = models.IntegerField(default=0,validators=[validate_positive]) 

將此添加到我的模型字段,但創建對象,如果價格低於零它不會引發任何錯誤。
我不知道我在哪裏做錯了,我是新的django。
我正在使用Django 1.9
請幫幫我。

+0

驗證器用於表單,不用於創建對象。如果你在表單之外創建一個對象,那麼你需要提供另一種驗證輸入的方法。 – Sayse

+0

@Sayse然後如何驗證給模型字段的輸入? – rock

回答

5

驗證器用於表單,不用於創建對象。如果你在表單之外創建一個對象,那麼你需要提供另一種驗證輸入的方法。

要做到這一點,最簡單的方法是,在docs

from django.core.exceptions import ValidationError 
try: 
    article.full_clean() 
except ValidationError as e: 
    # Do something based on the errors contained in e.message_dict. 
    # Display them to a user, or handle them programmatically. 
    pass 

這類似於從形式會發生什麼,顯示在保存之前調用模型的full_clean方法,並會叫上你的模型的任何驗證領域。

+0

所以我不得不重寫save()方法來驗證模型。 – rock

+0

@rock - 沒有,因爲這會讓你在使用(模型)表單時兩次驗證。您只需確保在保存之前進行驗證。如果你真的想要 – Sayse

+1

感謝您的解決方案,做一個'save_and_validate'方法。 – rock