首页 > 解决方案 > 带有 IntegrityError 的 Django CheckConstraint

问题描述

我想在我的 Django 模型中添加一个约束。我认为CheckConstraint当输入不符合约束时,该方法将有助于捕获错误。但是,当我使用无效输入(例如百分比 = 101)保存模型时,会显示带有 IntegrityError 的错误页面。这里有人知道如何正确使用此方法来验证输入吗?

    class Meta:
        constraints = [
            models.CheckConstraint(
                check=Q(percentage__gte=1)
                & Q(percentage__lte=100),
                name="Please enter a valid percentage",
            )
        ]

解决方案:我最终使用它来解决我的问题

    def clean_fields(self, exclude=None):
        super().clean_fields(exclude=exclude)
        if self.percentage and (
            self.percentage < 0 or self.percentage > 100
        ):

标签: pythonpython-3.xdjangodjango-models

解决方案


constraints仅)在数据库端强制执行,因此在IntegrityError不满足给定条件时会导致 s 。

为了引发正确的验证错误,您将验证器添加到模型字段,例如:

from django.core import validators

class MyModel(models.Model):
    percentage = models.IntegerField(validators=[
        validators.MinValueValidator(1),
        validators.MaxValueValidator(100)
    )]

    # …

推荐阅读