2009-12-09 10 views
7

Ich brauche aggregierten Wert von zwei Spalten. Also zuerst multiplizieren sie zusammen und dann bekommen sie ihre sum(). Code unten funktioniert natürlich nicht, es dient nur zur Verdeutlichung.Django: Get aggregierten Wert von zwei multiplen Spalten

Ist es irgendwie möglich oder sollte ich Raw SQL verwenden?

SomeModel.objects 
    .filter(**something) 
    .aggregate(Sum('one_column' * 'another_col')) 

Antwort

10

Sie brauchen nicht so viel Raw SQL mit extra().

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

{{ queryset.0.total }} 

Das hier richtig beantwortet wurde

Wie ich hier antwortete https://stackoverflow.com/a/36024089/4614802 die richtige Lösung hängt von der Django-Version.

  • Für django < 1.8 Verwendung .aggregate(Sum('field1', field="field1*field2"))
  • Für django> = 1,8 Verwendung .aggregate(Sum(F('field1')*F('field2'))