TypeError: unsupported operand type for -: 'datetime.time' and 'datetime.time'

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 

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},) 

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',) 

Actually, I am trying to calculate the total number of hours depending on the difference between 'intime' and 'outtime' in the models.py file, but it rises above erroe. I think I am making a syntax error. Can someone tell me what the correct syntax or method is for this? Any body, please suggest me what to do to fix this?

+5
source share
1 answer

This is because you cannot subtract datetime.time from datetime.time . Convert them to datetime.datetime objects and it will return a datetime.timedelta object that you can use.

If you are fortunate enough to use Django 1.8 , they now have a DurationField that you can use.

Otherwise, I would recommend converting timedelta to both seconds or to a floating point view so that you can actually store it in the database.

EDIT: Elongated in the comments for half the answer.

For example, if you want to save the number of (integer) seconds, you can convert from timedelta with secs = td // timedelta(seconds=1) .

+3
source

All Articles