Django将整数模型字段的范围设置为约束

时间:2015-11-18 06:10:08

标签: python django django-models

我有一个django模型,

class MyModel(models.Model)
    qty = model.IntegerField()

我要设置qty这样的约束,> 0或< 0,即qty可以是负数或正数但不能为0.

在Django中有没有直接的方法呢?

4 个答案:

答案 0 :(得分:55)

您可以使用Django's built-in validators -

from django.db import models
from django.core.validators import MaxValueValidator, MinValueValidator

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

注意:保存模型时验证程序不会自动运行,但如果您使用的是ModelForm,它将在表单中包含的字段上运行验证程序。请查看此link了解详情。

答案 1 :(得分:5)

您必须创建自定义验证器

from django.core.exceptions import ValidationError

def validate_number(value):
    if something :  # Your conditions here
        raise ValidationError('%s some error message' % value)

然后在模型中使用此验证器

from django.db import models

class MyModel(models.Model):
    field = models.IntegerField(validators=[validate_number])

答案 2 :(得分:3)

从Django 2.2开始,您可以使用CheckConstraint在数据库级别实施约束:

from django.db import models

class MyModel(models.Model)
    qty = model.IntegerField()

    class Meta:
        constraints = [
            models.CheckConstraint(
                check=models.Q(qty__gte=1) & models.Q(qt__lte=10),
                name="A qty value is valid between 1 and 10",
            )
        ]

答案 3 :(得分:-1)

如果您使用的是postgres,则可以使用范围字段指定范围。 检查一下:Range Fields in django