U kunt databasefuncties toevoegen aan Django , hiervoor kun je een functie toevoegen voor de INTERVAL-statement in postgres
class IntervalSeconds(Func):
function = 'INTERVAL'
template = "(%(expressions)s * %(function)s '1 seconds')"
U kunt deze functie vervolgens in uw zoekopdrachten gebruiken om seconden toe te voegen aan een datetime
YourModel.objects.annotate(
attr=ExpressionWrapper(
F("article__created_on") + IntervalSeconds(F("article__websitet__avg_time_in_seconds_to_reach_ep")),
output_field=models.DateTimeField()
),
)
De uitvoer van de IntervalSeconds
functie is een Postgres-interval
van 1 seconde vermenigvuldigd met het veld dat eraan is doorgegeven. Dit kan worden opgeteld en afgetrokken van een tijdstempel. Je zou een generiek Interval
. kunnen maken functie die niet slechts enkele seconden duurt, deze is iets complexer
De ExpressionWrapper
is vereist om het resultaat te converteren naar een datetime-object