如何限制Django模型中数值字段的最大值?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (187)

Django有各种可用于模型的数字字段。十进场正整数域.。虽然前者可以限制为存储的小数位数和存储的字符总数,但是否有办法将其限制在存储上?在一定范围内的数字,例如0.0-5.0?

如果做不到这一点,是否有办法将PositiveIntegerField限制为仅存储最多50个数字?

提问于
用户回答回答于

还可以创建自定义模型字段类型-

在这种情况下,可以从内置的IntegerField‘继承’并重写其验证逻辑。

我越多地思考这个问题,我就意识到这对于Django应用程序是多么的有用。也许可以将IntegerRangeField类型作为Django开发人员考虑添加到主干的修补程序提交。

这是为我工作的:

from django.db import models

class IntegerRangeField(models.IntegerField):
    def __init__(self, verbose_name=None, name=None, min_value=None, max_value=None, **kwargs):
        self.min_value, self.max_value = min_value, max_value
        models.IntegerField.__init__(self, verbose_name, name, **kwargs)
    def formfield(self, **kwargs):
        defaults = {'min_value': self.min_value, 'max_value':self.max_value}
        defaults.update(kwargs)
        return super(IntegerRangeField, self).formfield(**defaults)

然后在模型类中,可以这样使用它(字段是放置上述代码的模块):

size = fields.IntegerRangeField(min_value=1, max_value=50)

或用于负和正的范围(如振荡器范围):

size = fields.IntegerRangeField(min_value=-100, max_value=100)

真正酷的是,如果它可以用这样的Range操作符调用:

size = fields.IntegerRangeField(range(1, 50))

但是,这需要更多的代码,因为您可以指定一个“跳过”参数-范围(1,50,2)-

用户回答回答于

你可以用Django的内置验证器-

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

class CoolModelBro(Model):
    limited_integer_field = IntegerField(
        default=1,
        validators=[
            MaxValueValidator(100),
            MinValueValidator(1)
        ]
     )

扫码关注云+社区