TypeError:不支持的操作数类型-:“datetime.time”和“datetime.time”

2024-06-25 05:28:52 发布

您现在位置:Python中文网/ 问答频道 /正文

我的模特.py:

class Attendancename(models.Model):
    teacher_name = models.ForeignKey(Teachername, default='Ram')
    date = models.DateField('Date', default=datetime.datetime.today)
    intime = models.TimeField('IN-TIME', auto_now=True)
    outtime = models.TimeField('OUT-TIME', auto_now=True)

    def hours_conversion(self):
        startdelta = datetime.timedelta(hours=self.intime.hours, minutes=self.intime.minutes, seconds=self.intime.seconds)
        enddelta = datetime.timedelta(hours=self.outtime.hours, minutes=self.outtime.minutes, seconds=self.outtime.seconds)
        return (enddelta-startdelta).seconds/3600

    def __str__(self):
        return "%s" %self.teacher_name

我的观点.py:

def add_atten(request):
    if request.method == 'POST':
        form = AttendancenameForm(request.POST)
        if form.is_valid():
            form.save()
            return HttpResponseRedirect(reverse('student:listatten'))
        else:
            print(form.errors)
    else:       
        form = AttendancenameForm()
    return render(request, 'add_atten.html', {'form': form},)

我的表单.py:

class AttendancenameForm(ModelForm):
    intime = forms.TimeField(input_formats=('%H:%M',))
    outtime = forms.TimeField(input_formats=('%H:%M',))
    teacher_name = forms.ModelChoiceField(queryset=Teachername.objects.all())
    class Meta:
        model = Attendancename
        fields = ('teacher_name', 'date', 'intime', 'outtime',)

实际上,我试图根据models.py文件中的'intime''outtime'的差异来计算总小时数,但它超出了erroe。我想我是在犯语法错误。有人能告诉我正确的语法或方法吗? 有人能告诉我怎么修理吗?


Tags: namepyselfformdatetimereturnmodelsrequest
1条回答
网友
1楼 · 发布于 2024-06-25 05:28:52

这是因为你不能从datetime.time中减去datetime.time。将它们转换为datetime.datetime对象,它将返回一个可以使用的datetime.timedelta对象。

If you're lucky enough to be using ^{}, they now have a ^{} that can be used.

如果失败,我建议将timedelta转换为秒或浮点表示,这样您就可以将其实际存储到数据库中。

编辑:在评论中拉起一个半真半假的答案。

例如-如果要存储(整数)秒数,可以使用secs = td // timedelta(seconds=1)TimeDelta转换。

相关问题 更多 >