类型错误:不支持的操作数类型 -:'datetime.time' 和 'datetime.time' [英] TypeError: unsupported operand type(s) for -: 'datetime.time' and 'datetime.time'

查看:33
本文介绍了类型错误:不支持的操作数类型 -:'datetime.time' 和 'datetime.time'的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我的models.py:

my models.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

我的views.py:

my views.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},)

我的 forms.py:

my forms.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' 的差异来计算总小时数,但它引发了错误.我想我在做语法错误.任何人都可以请告诉我这样做的正确语法或方法是什么?任何机构请建议我如何解决它?

Actually I'm trying to calculate total number of hours based on difference of 'intime' and 'outtime' in my models.py file but it raises above erroe. I think I'm doing syntax error. Can anybody Please tell me what is the correct syntax or method to do so? Any body please suggest me what to do to fix it?

推荐答案

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

It's because you cannot subtract a datetime.time from a datetime.time. Convert them to datetime.datetime objects and it'll return a datetime.timedelta object that you could use.

如果你有幸使用 Django 1.8,他们现在有一个可以使用的 DurationField.

If you're lucky enough to be using Django 1.8, they now have a DurationField that can be used.

如果做不到这一点,我建议将 timedelta 转换为秒或浮点表示,以便您可以将其实际存储到数据库中.

Failing that, I would recommend converting the timedelta into either seconds or a floating point representation so you can actually store it to the database.

在评论中提取了一半的答案.

Pulled up in comments for half arsing an answer.

例如 - 如果您想存储(整数)秒数,您可以使用 secs = td//timedelta(seconds=1)TimeDelta 转换代码>.

For example - if you want to store the number of (integer) seconds, you can convert from a TimeDelta by using secs = td // timedelta(seconds=1).

这篇关于类型错误:不支持的操作数类型 -:'datetime.time' 和 'datetime.time'的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆