2017-08-23 3 views
0

J'ai une requête dans SQLite qui regroupe les champs par semaines et effectue somme et moyenne sur la distance et temps champs dans la même table:Convertir SQLite à Django ORM

select 
    strftime('%W', datetime) WeekNumber, 
    sum(distance) as TotalDistance, 
    sum(distance)/sum(time) as AverageSpeed 
from sample_login_run 
group by WeekNumber; 

J'essaie de convertir cette requête à Django ORM et évitez d'utiliser la fonction Raw. Je comprends que je devrais utiliser extra dans Django ORM. Cela ne devrait pas être un problème cependant. Je suis arrivé ceci:

Run.objects.extra(select={'week': "strftime('%%W', datetime)"}).values(
      'week','distance').annotate(
      total_distance=Sum('distance'), average_time=F('distance')/F('time')) 

Mais est GROUPEMENT également les données par average_time et average_distance champ. Toute aide sera vraiment appréciée. Je vous remercie.

Répondre

0

solution pour cela est:

Run.objects.extra(select={'week': "cast(strftime('%%W', date_run) as integer)"}).values('week').annotate(
       total_distance=Sum('distance'), average_time=F('distance')/F('time')) 

Les champs passés dans values vont sous group by partie de la requête.