0

「caller_name」フィールドと「call_datetime」フィールドを含むモデルがあります。

特定の月の各日に発生した通話数を取得できました。

while start_date <= end_date:
    calls = CDR.objects.filter(start_time__year=str(start_date.year), start_time__month=str(start_date.month), 
                                    start_time__day=str(start_date.day))
    print "Number of calls:", len(calls)
    start_date = start_date + datetime.timedelta(days=1)

同様に、特定の日付の1時間ごとの通話数を取得しようとしました。

for i in range(24):
    calls = CDR.objects.filter(start_time__year=str(start_date.year), start_time__month=str(start_date.month),start_time__day=str(start_date.day), start_time__hour=str(i))

「start_time__hour」が実装されていないことがわかりましたが、これを達成するための方法はありますか?

4

2 に答える 2

2

この回避策を試してください:

day_calls = CDR.objects.filter(start_time__year=str(start_date.year), start_time__month=str(start_date.month),start_time__day=str(start_date.day))

hour_calls = day_calls.extra(select={'hours': 'DATE_FORMAT(start_date, "%%H")'})\
                      .values_list('hours', flat=True)\
                      .distinct()\
                      .order_by('hours')
于 2012-12-08T11:51:11.683 に答える
1

.extra()メソッドまたは次のようなもので生のSQLを使用できます。

for i in range(24):
    dt1 = start_time.replace(hour=i)
    dt2 = dt1 + datetime.timedelta(hours=1)
    calls = CDR.objects.filter(start_time__gte=dt1, start_time__lt=dt2)
于 2012-12-08T11:49:44.203 に答える