Solución:
Sé que esto es antiguo, pero tal vez sea útil ya que también me encontré en esta situación:
¿Qué pasa con el uso de make_aware ()?
from datetime import datetime
from django.utils.timezone import make_aware
date="22-05-2018"
aware = make_aware(datetime.strptime(date, '%d-%m-%Y'))
Esto usará la zona horaria actualmente activa (activada por timezone.activate
). Si no se activa explícitamente ninguna zona horaria, se usaría la zona horaria predeterminada: TIME_ZONE
especificado en settings.py
.
Estás comparando Python que desconoce la zona horaria Date
objetos con la zona horaria consciente DateTimeField
campos en su base de datos. Probablemente sea más intuitivo de usar DateTime
objetos, y estos se pueden hacer que reconozcan la zona horaria fácilmente de la siguiente manera:
import datetime
import pytz
start_date="15-01-2016"
end_date="16-01-2016"
date_format="%d-%m-%Y"
unaware_start_date = datetime.datetime.strptime(start_date, date_format)
aware_start_date = pytz.utc.localize(unaware_start_date)
unaware_end_date = datetime.datetime.strptime(end_date, date_format)
aware_end_date = pytz.utc.localize(unaware_end_date)
my_list = MyModel.objects.filter(created_at__range=(aware_start_date, aware_end_date))
Esto crea unaware_start_date
y unaware_end_date
DateTime
objetos usando strptime()
. Luego usa pytz.utc.localize
para que los objetos sean conscientes de la zona horaria (deberá reemplazar utc
con su zona horaria relevante).
A continuación, puede tener conciencia de la zona horaria DateTime
objetos – aware_start_date
y aware_end_date
. Alimentarlos en su filtro debería producir los resultados deseados.