Django Validators在shell命令中不工作

brjng4g3  于 2023-08-08  发布在  Go
关注(0)|答案(1)|浏览(100)

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)


但我肯定这没必要,你能帮我吗?

2admgd59

2admgd591#

但我肯定这没必要,你能帮我吗?
Django在保存项目时不运行验证器,只有ModelForm运行,可能是出于性能原因。
实际上,你可以使用**.full_clean()**方法[Django-doc]显式地运行验证器:

e = Empresa(name="Testing Case", cuit='1')
e.full_clean()  # will raise error
e.save()

字符串

相关问题