latest - tutorial django
¿Cómo crear un Django FloatField con límites máximos y mínimos? (2)
Las respuestas hasta ahora describen cómo hacer que los formularios validen. También puedes poner validadores en el modelo. Use MinValueValidator y MaxValueValidator .
Por ejemplo:
from django.core.validators import MaxValueValidator, MinValueValidator
...
weight = models.FloatField(
validators=[MinValueValidator(0.9), MaxValueValidator(58)],
)
No creo que eso agregue restricciones de SQL, aunque.
Estoy almacenando algunos datos de coma flotante en mis modelos de Django, y solo un cierto rango de valores es significativo. Por lo tanto, me gustaría imponer estos límites tanto en el modelo como en el nivel de restricción de SQL.
Por ejemplo, me gustaría hacer algo como esto:
class Foo(Model):
myfloat = FloatField(min=0.0, max=1.0)
Quiero hacer esto a nivel de modelo, no a nivel de formulario. De hecho, me gustaría que el nivel del formulario tenga un rango diferente; por ejemplo, use porcentajes [0,100] a nivel de formulario, pero se traduce a [0,1] en el modelo.
¿Es esto posible, y si es así, cómo voy a hacerlo?
Si necesita una restricción en el nivel del formulario, puede pasar min_value
y max_value
al campo de formulario :
myfloat = forms.FloatField(min_value=0.0, max_value=1.0)
Pero si necesita moverlo al nivel de modelo, debe extender los models.FloatField
base models.FloatField
Clase 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)
Entonces puedes usarlo en modelos
class Foo(models.Model):
myfloat = MinMaxFloat(min_value=0.0, max_value=1.0)