2016-06-23 5 views
0

の週によって集計クエリセット:ジャンゴ - 私はモデルがこのように見てきた年

class TestData(models.Model): 
    name = models.CharField(max_length=255) 
    one_value = models.IntegerField() 
    second_value = models.IntegerField() 
    create_at = models.DateTimeField() 

が簡単に今年の毎週のため合計値のクエリセットを生成するためにどのような方法か? ジャンゴ1.9、Pythonの3

+0

週をどのように定義しますか?何を試しましたか? – Sayse

+0

@Sayse私自身の解決策は非常に醜いです。追加の列 'week'を作成し、年、週、_ = create_at.isocalendar()を行います。その作業が、私はコードのこの部分から誇りに思っていません。 – Xezeqeel

答えて

2
from django.db.models import Func, F, Sum 

class Week(Func): 
    def as_mysql(self, compiler, connection): 
     self.function = 'WEEK' 
     return super().as_sql(compiler, connection) 

data = (TestData.objects 
     .filter(create_at__year=year) 
     .annotate(week=Week('create_at', output_field=IntegerField())) 
     .values('week') 
     .annotate(Sum('one_value'))) 

またはSum(F('one_value') + F('second_value'))、あなたが取得したいものを合計によって異なります。

+1

私は決してFuncを使用しません。なぜ私は印刷(データ)をしようとすると "django.db.utils.OperationalError:いいえそのような関数:なし"と言うことができますか? – Xezeqeel

+0

@ Xezeqeelどのデータベースを使用していますか? –

+0

それは私のためにコードの終わりで動作します:return super(Week、self).as_sql(コンパイラ、接続) –

1

これは私のために働いた。ウラジミールダニロフの解決策に従います。

+0

'WeekFunc'または' Week'? – LShi

+0

@LShiあなたはself.functionが 'WEEK'であるかぎり、 – zubhav

関連する問題