2015-10-19 87 views
1

最近我發現它可以直接在models.py文件中定義Django表單驗證。這可以通過以下方式:Django:模型驗證順序

fev1_liter = models.DecimalField(validators=[MaxValueValidator(8.2), 
      MinValueValidator(0.3)], 
      max_digits=3, decimal_places=2) 

這是在forms.py驗證一個真棒替代,但我有一個很煩人的問題: 如何控制其順序進行驗證? 在這個例子中,Django將首先驗證輸入數字的格式是x.xx,然後是最小值和最大值。這會導致一些非常混亂的錯誤消息。 在此先感謝!經由field.validate()

+0

你能發佈那些錯誤消息嗎? – Ivan

+0

如果輸入25,錯誤消息是「允許分隔符前只有一位數字」,而不是更友好的「值必須在0.3 -8.2之間」。 – Vingtoft

回答

1

對於每個模型字段,field.clean()首先執行字段校驗,然後經由field.run_validators(),驗證器被稱爲以便它們從field.validators迭代器返回。

這很有道理,因爲在一般情況下,如果字段驗證失敗,您可能會希望驗證程序失敗,因此它使調試變得更加容易。請記住,字段驗證程序不是強制性的,因此field.validate()優先。如果您想更改行爲,則必須創建自己的Field類並覆蓋field.clean()行爲。

您可以檢查field sources瞭解更多詳情。

+0

我希望有一個簡單的解決方法。但是爲什麼驗證是按照當前的順序呢,這非常有意義。感謝你的回答。 – Vingtoft