Django Validators不适用于shell命令,它只适用于Django Forms和Django Admin,而不是shell命令。我有这个:
验证器
def validate_cuit(value):
""" Must be exactly 11 numeric characters """
if len(value) != 11:
raise CuitValidationException('CUIT should have 11 characters')
if not value.isdigit():
raise CuitValidationException('CUIT should only contain numeric characters')
return value
字符串
异常
class CuitValidationException(ValidationError):
pass
型
型号
class Empresa(models.Model):
name = models.CharField(max_length=120, validators=[validate_name])
cuit = models.CharField(max_length=11, validators=[validate_cuit])
型
如果我这样做,我不会得到任何错误
e = Empresa.objects.create(name="Testing Case", cuit='1')
型
我发现解决这个问题的唯一方法是使用 * 保存 * 方法:
def save(self, force_insert=False, force_update=False, using=None, update_fields=None):
self.name = validate_name(self.name)
self.cuit = validate_cuit(self.cuit)
return super().save(force_insert, force_update, using, update_fields)
型
但我肯定这没必要,你能帮我吗?
1条答案
按热度按时间2admgd591#
但我肯定这没必要,你能帮我吗?
Django在保存项目时不运行验证器,只有
ModelForm
运行,可能是出于性能原因。实际上,你可以使用**
.full_clean()
**方法[Django-doc]显式地运行验证器:字符串