Объедините 2 поля в Django, чтобы посчитать разницу между часами - PullRequest
0 голосов
/ 21 ноября 2018

Я пытаюсь вычислить разницу между 2 DateTimeField, чтобы узнать общую работу (только часы) в неделю, и я хочу эту же функцию только для дней.

После другого вопроса Stackoverflow я нахожу такую ​​агрегацию:

total_hours_per_week = (Timesheet.objects.filter(
        owner = request.user.pk,
        week = datetime.datetime.now().isocalendar()[1]
    )
    .annotate(
        total_hours_per_week=Func(F('end'), F('start'), operator='+', function='age')
    ))

В настоящее время у меня нет функции в течение нескольких дней (если вы тоже можете помочь мне с ней), но это предыдущее объединение возвращает мне эту ошибку: "нет такой функции: возраст"

Вы можете прочитать ниже мои модели:

class Timesheet(models.Model):
owner = models.ForeignKey(User, on_delete = models.CASCADE)
title = models.CharField(max_length = 64, verbose_name = _("Title"))
start = models.DateTimeField(verbose_name = _("Start time"))
end = models.DateTimeField(verbose_name = _("End time"))
allDay = models.BooleanField(blank = True, default = False, verbose_name = _("All day"), help_text = _("If it's a full day work, just click 'Now' for start/end"))
week = models.IntegerField(verbose_name = "working week")

def __str__(self):
    return "{}".format(self.title)

def save(self, *args, **kwargs):
    if not self.pk:
        self.week = datetime.datetime.now().isocalendar()[1]
    if self.allDay:
        self.start = datetime.datetime(year = datetime.datetime.today().year, month = datetime.datetime.today().month, day = datetime.datetime.today().day, hour=8, minute=00)
        self.end = datetime.datetime(year = datetime.datetime.today().year, month = datetime.datetime.today().month, day = datetime.datetime.today().day, hour=17, minute=30)
    super(Timesheet, self).save(*args, **kwargs)

Я надеюсь, что вы можете помочь мне решить мою ошибку.

Спасибо за аванс!

...