tengo un modelo:¿Cómo hacer que los campos de un modelo de Django se calculen en tiempo de ejecución?
class Person (models.Model):
name = models.CharField()
birthday = models.DateField()
age = models.IntegerField()
Quiero hacer age
campo para comportarse como una propiedad:
def get_age (self):
return (datetime.datetime.now() - self.birthday).days // 365
age = property (get_age)
pero, al mismo tiempo que necesito age
a ser un verdadero campo, por lo que puedo encuéntrelo en Person._meta.fields
, y asígnele atributos: age.help_text = "Age of the person"
, etc.
Obviamente no puedo anular el método Person.save()
para calcular y almacenar age
en la base de datos, porque inevitablemente se volverá erróneo más adelante (de hecho, no debería almacenarse en la base de datos).
En realidad, no necesito tener setters ahora, pero una buena solución debe tener la función de configuración.
¿Es posible en Django, o probablemente hay un enfoque más pythonic y djangoic a mi problema?
¿Por qué no va a funcionar el método de salvar? –
Porque puede ser incorrecto la próxima vez que obtengamos una instancia de modelo. Este es un ejemplo simple, en realidad tengo campos más complejos, cuyos valores cambian impredecibles, dependiendo de muchos otros factores. –