我有一些带有继承的模型,看起来像这样:
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 shell 并执行以下操作:
>>> 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 位。