Джанго группа по часам / дням - PullRequest
0 голосов
/ 04 июня 2019

У меня есть модель:

Model.py

class DispatchPlan(models.Model):
    total_trucks = models.IntegerField(default=0)
    material_type = models.CharField(max_length=255, default=0, choices=mtypes)
    scheduled_date = models.DateTimeField(max_length=255, default=0)
    offered_price = models.IntegerField(default=0)
    weight = models.IntegerField(default=0)

и я пытаюсь построить график между schedule_date и weight. Я хочу сгруппировать метку времени по часам и весу соответственно. Как я могу это сделать?

В SQl это точно так же, как .groupby('scheduled_date), но так как это временная метка, я не думаю, что это то же самое

Должно ли это быть как:

data = DispatchPlan.objects.all().groupby('scheduled_date')

Я использую postgres в качестве базы данных.

Edit: что я пробовал

dataset = DispatchPlan.objects.annotate(month=TruncMonth('scheduled_date')).values('month').annotate(c=sum('weight')).values('month', 'c')

ошибка:

TypeError: неподдерживаемые типы операндов для +: 'int' и 'str'

1 Ответ

1 голос
/ 04 июня 2019

Вам нужно использовать метод Django Sum вместо Python sum.Так что сделайте что-то вроде этого:

from django.db.models import Sum

dataset = DispatchPlan.objects.annotate(month=TruncMonth('scheduled_date')).values('month').annotate(c=Sum('weight')).values('month', 'c')

Поскольку кажется, что вы хотите сгруппировать по часам, вы должны использовать TruncHour вместо:

from django.db.models import Sum
from django.db.models.functions import TruncHour

dataset = DispatchPlan.objects.annotate( 
    hour=TruncHour('scheduled_date')
).values(
    'hour'
).annotate(
    c=Sum('weight')
).values(
    'hour', 
    'c',
)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...