- vohu,
Salut, je bosse sur un ptit projet django, et je commence à fumer sur certaines requêtes…
J’utilise django 1.10 en python3, et sqlite3.
Avec un modèle comme celui là :
1 2 3 4 5 | class Appel(models.Model): debut_appel = models.DateTimeField(verbose_name="Debut de l'appel", default=timezone.now, editable=True, null = True, blank=True) fin_appel = models.DateTimeField(verbose_name="Fin de l'appel", default=timezone.now, null = True, blank=True) duree_appel_calculee = models.BigIntegerField(verbose_name="Durée de l'appel calculée en secondes", null = True, blank=True, editable=False) personne = models.ForeignKey(Personne, related_name="appels", verbose_name="Personne") |
duree_appel_calculee est calculé et enregistré à l’enregistrement du formulaire.
J’aimerai donc faire une requête qui me permette d’avoir la somme de duree_appel_calculee par mois pour une personne. Un truc du genre :
- 2016-12 | 143
- 2017-02 | 61
- 2017-03 | 59
- 2017-05 | …
Donc jusque maintenant, j’ai filtré par personne, et j’ai un champ calculé ’da’ tronqué sur le mois.
1 | Appel.objects.filter(personne=1).annotate(da=TruncMonth('debut_appel')).values('da', 'duree_appel_calculee') |
<QuerySet [{’da’: datetime.datetime(2017, 2, 1, 0, 0, tzinfo=<UTC>), ’duree_appel_calculee’: 61}, {’da’: datetime.datetime(2017, 3, 1, 0, 0, tzinfo=<UTC>), ’duree_appel_calculee’: 1}, {’da’: datetime.datetime(2017, 3, 1, 0, 0, tzinfo=<UTC>), ’duree_appel_calculee’: 58}]>
Maintenant, vu que je ne peux utiliser l’agréation sur le champ ’da’ (sqlite ne le gère pas), j’aimerai le convertir en chaine avec DateTime.strftime("%Y-%m") mais… je coince…
Merci d’avance pour votre aide