2010-03-11 4 views
2

Étant donné le modèle Contribution suivant:Somme colonne calculée dans Django QuerySet

class Contribution(models.Model): 
    start_time = models.DateTimeField() 
    end_time = models.DateTimeField(null=True) 

est-il possible, en utilisant l'API de base de données de Django, de reproduire l'instruction SQL suivante?

SELECT SUM(end_time - start_time) AS total_duration FROM contribution; 

J'ai compris ceci:

Contribution.objects.aggregate(total_duration=models.Sum(???)) 

mais je ne suis pas sûr de savoir comment représenter la partie end_time - start_time. Merci!

Répondre

1

Pour le moment, il n'y a pas de ticket pour les objets F() dans l'agrégation, mais rien de prometteur.

La seule façon que je vois est de solution de contournement en somme en python:

sum([x[1]-x[0] for x in Contribution.objects.values_list('start_time', 'end_time')])