2009-12-09 8 views

Odpowiedz

10

Nie potrzebujesz tyle surowego kodu SQL, używając extra().

obj = SomeModel.objects.filter(**something).extra(
    select = {'total': 'SUM(one_column * another_column)'}, 
) 
1

To jest sparta. W ten sposób, jeśli chcesz go wydrukować gdzieś w szablonie musisz użyć czegoś takiego:

{{ queryset.0.total }} 

ten został prawidłowo tutaj odpowiedzi: Django Aggregation: Summation of Multiplication of two fields

forma jest:

agg = Task.objects.all().aggregate(total=Sum('field1', field="field1*field2")) 
1

Jak odpowiedziałem tutaj https://stackoverflow.com/a/36024089/4614802 poprawne rozwiązanie zależy od wersji django.

  • Dla django < 1,8 stosowania .aggregate(Sum('field1', field="field1*field2"))
  • Dla django> = 1,8 zastosowania .aggregate(Sum(F('field1')*F('field2'))