添加两个时间值并显示在模板中

问题描述 投票:0回答:1

我在如何正确显示模板中两个时间值的相加时遇到问题。这是我的代码。

模型.py

class UserTimesheet(models.Model):
    employee = models.ForeignKey(Employee, models.SET_NULL, blank=True, null=True)
    date = models.DateField()
    monday_start_time = models.TimeField(_(u"Start Time"), null=True, blank=True)
    monday_end_time = models.TimeField(_(u"End Time"), null=True, blank=True, )

    @property  
    def get_monday_total(self):
        if self.monday_start_time is not None and self.monday_end_time is not None:
            return self.monday_end_time - self.monday_start_time

我尝试过使用:

{{ get_monday_total }}
{{ UserTimesheet.get_monday_total }}

还有很多不同的其他事情,但我一生都无法弄清楚如何在模板中显示此逻辑。有什么想法吗?

感谢所有帮助。


编辑

views.py

@login_required(login_url="/login")
def manage_timesheet(request, pk):
    time = UserTimesheet.objects.all()

    queryset = UserTimesheet.objects.get(id=pk)
    form = Timesheet(instance=queryset)

    if request.method == 'POST':
        form = Timesheet(request.POST, instance=queryset)
        if form.is_valid():
            form.save()
            return redirect('/timehub')

    return render(request, 'newtimesheet/manage_timesheet.html', {"form": form, "queryset": queryset, "time": time})
python django django-crispy-forms
1个回答
0
投票

第一个问题是你不能减去两个

time
。解决方法是使用
datetime
:

from datetime import datetime, time, date

monday_start_time = time(1, 1, 1, 1)
monday_end_time = time(1, 1, 1, 1)
delta = (datetime.combine(date.min, monday_start_time) - datetime.combine(date.min, monday_end_time))
# datetime.timedelta(days=-1, seconds=82738, microseconds=999999)

我不确定您想要显示什么信息,但您现在可以按原样使用此增量或进行进一步操作。

此外,由于您传递了

queryset
(应该重命名,因为
.get
返回一个实例,而不是查询集),因此您应该在模板中使用
{{ queryset.get_monday_total }}

© www.soinside.com 2019 - 2024. All rights reserved.