如何创build具有最大和最小限制的Django FloatField?
我在我的Django模型中存储了一些浮点数据,只有一定范围的值是有意义的。 因此,我想在模型和SQL约束级别上强加这些限制。
例如,我想要做这样的事情:
class Foo(Model): myfloat = FloatField(min=0.0, max=1.0)
我想在模型层面做到这一点,而不是forms层面。 其实,我可能喜欢表单层次有不同的范围; 例如,在表单级使用百分比[0,100],但在模型中转换为[0,1]。
这是可能的,如果是的话,我会怎么做呢?
到目前为止的答案描述如何使表单validation。 你也可以在模型中joinvalidation器。 使用MinValueValidator和MaxValueValidator 。
例如:
from django.core.validators import MaxValueValidator, MinValueValidator ... weight = models.FloatField( validators = [MinValueValidator(0.9), MaxValueValidator(58)])
我不认为这增加了SQL约束。
如果您需要在表单级别上进行约束,则可以将min_value
和min_value
传递给表单字段 :
myfloat = forms.FloatField(min_value=0.0, max_value=1.0)
但是,如果您需要将其移动到模型级别,则必须扩展基本模型models.FloatField
类
class MinMaxFloat(models.FloatField): def __init__(self, min_value=None, max_value=None, *args, **kwargs): self.min_value, self.max_value = min_value, max_value super(MinMaxFloat, self).__init__(*args, **kwargs) def formfield(self, **kwargs): defaults = {'min_value': self.min_value, 'max_value' : self.max_value} defaults.update(kwargs) return super(MinMaxFloat, self).formfield(**defaults)
那么你可以在模型中使用它
class Foo(models.Model): myfloat = MinMaxFloat(min_value=0.0, max_value=1.0)