Tengo un modelo Django con Datefield y Timefield separados para un evento. ¿Hay alguna forma de convertirlo en un objeto datetime de python para que pueda consultar los próximos eventos con cierta precisión? Actualmente solo recibo las próximas del día siguiente.
modelos.py
event_time = models.TimeField() event_date = models.DateField()
Básicamente, ¿puedo filtrar con un minuto, o incluso dividir una precisión?
Gracias.
Utilice un DateTimeField
lugar (consulte esta sección en la documentación). La conversión a un datetime.datetime
es manejada por usted por Django automáticamente.
Un DateField
da DateField
resultado un objeto datetime.date
y un objeto datetime.time
. Puede usar replace
para combinar estos valores en una date
actualizada:
>>> today = datetime.datetime.today () >>> hoy datetime.datetime (2012, 3, 31, 11, 6, 5, 182371) >>> tiempo = datetime.time (11, 30) >>> today.replace (hour = time.hour, minute = time.minute) datetime.datetime (2012, 3, 31, 11, 30, 5, 182371)
Tenga en cuenta que la date
resultante tiene 11.30 como hora actual. Tenga en cuenta también que today
no se modifica, simplemente calcula una nueva fecha y hora. Como puede ver, ahora tiene que fusionarse porque ambos valores se almacenan en campos separados. Es por eso que DateTimeField
es una opción mucho mejor, si tiene la capacidad de modificar los campos del modelo.
Deberá agregar un nuevo campo como un campo de combinación de fecha y hora. Mejor para el rendimiento.
event_full_datetime = models.DateTimeField()
arreglar la base de datos antigua. para shell como este script.
for obj in YourModel.objects.all(): obj.event_full_datetime = datetime.datetime( obj.event_date.year,obj.event_date.month, obj.event_date.day, obj.event_time.hour, obj.event_time.minut, obj.event_time.second) obj.save()