ksergio.com

I love coding

← Volver

Django y MySQL filter campo por month

12/7/2024

El error se daba cuando quería realizar la siguiente consulta:

from horas.models import Registros
from trabajadores.models import Trabajador

trabajador = get_object_or_404(Trabajador, pk=trabajador_id)

registros = Registro.objects.filter(
    trabajador=trabajador,
    inicio__year=ano,
    inicio__month=mes,
    final__isnull=False,
)

En mi servidor de desarollo con una base de datos MySQL levantada con Docker no tenía ningún problema, pero en el servidor de producción me devolvía un QuerySet vacío.

Haciendo lo siguiente funcionaba. El año lo cogía bien, pero el problema venía a la hora de filtrar por meses sobre un campo datetime. En este caso el campo inicio__month.

registros = Registro.objects.filter(
    trabajador=trabajador,
    inicio__year=ano,
    #inicio__month=mes,
    final__isnull=False,
)

No existía diferencia entre el servidor de desarollo y el de producción en el código relacionado a esta vista de Django.

Para solucionarlo en este caso simplemente hay que hacer:

mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -u root -p mysql

El error se producía debido a una mala configuración de la base de datos en el servidor remoto. Aquí está la explicación de solución encontrada:

https://stackoverflow.com/questions/60810946/django-truncdate-gives-null