無效值我有一個繼承了一些模型,看起來像這樣:Django的model.full_clean()允許IntegerField
Class A(models.Model):
some_text = models.CharField(max_length=100)
#other fields, not important
Class B(A):
some_int = models.IntegerField(blank=True, null=True, validators=[MinValueValidator(1), MaxValueValidator(1000)])
然後我火了Django的外殼並執行以下操作:
>>> obj = B()
>>> obj.some_text = 'foo'
>>> obj.some_int = 'bar'
>>> obj.full_clean()
,自然我得到:
>>> ValidationError: {'some_int': [u"'bar' value must be an integer."]}
好。然後:
>>> obj.some_int = ' ' #whitespace
>>> obj.full_clean()
我也得到:
>>> ValidationError: {'some_int': [u"' ' value must be an integer."]}
完美。但後來我嘗試空字符串:
>>> obj.some_int = '' #empty string
>>> obj.full_clean()
沒有ValidationError提高,但如果我嘗試保存對象:
>>> obj.save()
我得到:
>>> ValueError: invalid literal for int() with base 10: ''
這是怎麼回事?這是正確的行爲? Django如何檢查值是否爲有效整數?
我真的不想自定義我的模型的clean()函數來檢查這個,但它開始看起來像我沒有選擇。
編輯:Django 1.6.5,Python 2.7.6,Windows 7 64位。
Welp ...你說得對。我想這有一個很好的理由,我目前無法完全理解。儘管如此,看到它明確寫道我負責驗證空白字段的'blank = True'使得解決方案感覺不那麼髒亂。謝謝。 – 2014-08-31 21:32:34