提问人:Eugenio 提问时间:7/26/2023 更新时间:7/26/2023 访问量:27
Django 验证器在 shell 命令中不起作用
Django Validators not working in shell command
问:
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)
但我相信这应该不是必需的,你能帮我解决这个问题吗?
答:
2赞
willeM_ Van Onsem
7/26/2023
#1
但我相信这应该不是必需的,你能帮我解决这个问题吗?
Django 在保存项目时不会运行验证器,只有 s 会运行,可能是出于性能原因。ModelForm
事实上,你可以使用 .full_clean()
方法 [Django-doc] 显式运行验证器:
e = Empresa(name="Testing Case", cuit='1')
e.full_clean() # will raise error
e.save()
评论
0赞
Eugenio
7/27/2023
太好了,它对我帮助很大。谢谢
评论
ModelForm