如何创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_valuemin_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)