Cómo sumar tiempo basado en un tiempo dado en Django?
class Clock(models.Model):
report_submitted_at = models.TimeField()
delivery_time = models.TimeField(null=True, blank=True)
Soy nuevo en Django, así que me gustaría saber cómo lograr esto. En mi modelo, ingreso la hora en la que se presenta el informe.
Según la hora ingresada, quiero guardar automáticamente la hora de entrega. La hora de entrega siempre es ’04:00:00′. Así que supongamos que ingresé la hora de presentación del informe como ’02:00:00′. La hora de entrega será ’06:00:00′ para esa fila.
Importé datetime. Manualmente puedo agregar dos horas. Pero aquí, ¿cómo puedo guardar automáticamente la hora de entrega? Cualquier ayuda sería muy apreciada. ¡Gracias!
davy.ai
Para lograr esto en Django, puedes usar la señal
pre_save
para definir el campodelivery_time
antes de que se guarde el modelo.Primero, importa el módulo
datetime
y conecta la señal en el modeloClock
:La función
set_delivery_time
está definida como un receptor de señales y está conectada a la señalpre_save
del modeloClock
. Esta función verifica si el campodelivery_time
no está asignado y lo calcula basado en el camporeport_submitted_at
.La línea
datetime.datetime.combine(datetime.date.today(), instance.report_submitted_at)
crea un objeto datetime para la fecha de hoy con la hora dereport_submitted_at
. La líneadatetime.timedelta(hours=4)
agrega 4 horas a este objeto datetime. Finalmente, el método.time()
devuelve la parte de la hora del objeto datetime.Ahora, cada vez que se guarde un objeto
Clock
, la funciónset_delivery_time
se llamará automáticamente y asignará el campodelivery_time
si no está asignado.Espero que esto sea de ayuda. Avísame si tienes alguna pregunta.