with tutorial latest framework español desde con cero applications django django-models

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)