sql >> Base de Datos >  >> RDS >> PostgreSQL

¿Cómo escribo una consulta de Django que hace matemáticas de fecha cuando se ejecuta como PostGres SQL?

Puede agregar funciones de base de datos a Django , para esto puede agregar una función para la instrucción INTERVALO en postgres

class IntervalSeconds(Func):

    function = 'INTERVAL'
    template = "(%(expressions)s * %(function)s '1 seconds')"

Luego puede usar esta función en sus consultas para agregar segundos a una fecha y hora

YourModel.objects.annotate(
    attr=ExpressionWrapper(
        F("article__created_on") + IntervalSeconds(F("article__websitet__avg_time_in_seconds_to_reach_ep")),
        output_field=models.DateTimeField()
    ),
)

La salida de IntervalSeconds la función es un intervalo de Postgres de 1 segundo multiplicado por el campo que se le pasa. Esto se puede sumar y restar de una marca de tiempo. Podrías hacer un Interval genérico función que no solo toma segundos, esto es un poco más complejo

El ExpressionWrapper es necesario para convertir el resultado en un objeto de fecha y hora