Django验证器不能在shell 命令中工作,它只能在Django表单和Django Admin上工作,但不能在shell 命令中工作.我有这个:

Validator

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

Exception

class CuitValidationException(ValidationError):
    pass

型号

class Empresa(models.型号):
    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')

我发现解决这个问题的唯一方法是使用save方法:

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)

但我肯定这不是必须的,你能帮我吗?

推荐答案

但我肯定这不是必须的,你能帮我吗?

Django在保存项目时不会运行验证器,可能是出于性能原因,只有ModelForm人会这样做.

实际上,您可以使用.full_clean() method [Django-doc]:

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

Python相关问答推荐

ValueRight:参数目标和输出必须具有相同的形状.接收:目标.形状=(无,512),输出.形状=(无,3)

在Python中使用readline函数时如何向下行

Odoo onchange for invoice_Status of sale事件.订单未触发

如何在Pygame中绘制右对齐的文本?

键盘.任务组

仅对matplotlib的条标签中的一个条标签应用不同的格式

避免循环的最佳方法

如何让我的Tkinter应用程序适合整个窗口,无论大小如何?

线性模型PanelOLS和statmodels OLS之间的区别

查找两极rame中组之间的所有差异

如何制作10,000年及以后的日期时间对象?

将9个3x3矩阵按特定顺序排列成9x9矩阵

如何在FastAPI中为我上传的json文件提供索引ID?

在Python中使用if else或使用regex将二进制数据如111转换为001""

如何更改groupby作用域以找到满足掩码条件的第一个值?

Gekko中基于时间的间隔约束

pandas fill和bfill基于另一列中的条件

在用于Python的Bokeh包中设置按钮的样式

Beautifulsoup:遍历一个列表,从a到z,并解析数据,以便将其存储在pdf中.

无法在Spyder上的Pandas中将本地CSV转换为数据帧