Django 验证器在 shell 命令中不起作用

Django Validators not working in shell command

提问人:Eugenio 提问时间:7/26/2023 更新时间:7/26/2023 访问量:27

问:

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)

但我相信这应该不是必需的,你能帮我解决这个问题吗?

python django 验证

评论

1赞 willeM_ Van Onsem 7/26/2023
Django 在保存项目时不会运行验证器,只有 s 会运行,可能是出于性能原因。ModelForm

答:

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
太好了,它对我帮助很大。谢谢