0

Good day and a happy easter-weekdend,

in Django I'm trying calculate inside my "models.py" with the amounts of multiple TimeField. For example:

class Times(models.Model):
    ...
    time_from = model.TimeField()
    time_to = model.TimeField()
    time_break = model.TimeField(default='00:00:00')
    time_all = ...
    ...

Let's say my times look like...

  • time_from: 08:00:00
  • time_to: 14:30:00
  • time_break: 00:30:00

... I want to achieve the time of "06:00:00" inside my variable "time_all"

Does anyone have an idea?

Thanks!

finethen
  • 385
  • 1
  • 4
  • 19

2 Answers2

0
class Times(models.Model):
    ...
    time_from = model.TimeField()
    time_to = model.TimeField()
    time_break = model.TimeField(default='00:00:00')
    time_all = ...
    ...


def save(self, *args, **kwargs):
   print(self.time_from," aaaaaaaaaaaaaa " ,self.time_to) 
   self.time_all = "blah blah " #do what ever you need here 
   super(Model, self).save(*args, **kwargs)

Use any calculation or formatting before save. You can also try this with signals if you need to do before or after save.

For time string difference, please refer this example

Thomas John
  • 2,138
  • 2
  • 22
  • 38
  • I'm trying to get the value of my models.TimeField() into a time string variable but it doesn't seem to work. With "dt.datetime.strptime(str(timeFrom), '%H:%M:%S')" I get the response: time data '<..TimeField>' does not match format '%H:%M%:S' – finethen Apr 13 '20 at 12:45
0

If you want calculate many TimeField, you must have to convert temporarily yours fields to datetime and timedelta. So, like this :

from datetime import datetime, date, time, timedelta


time_from = time(8, 0)
time_to = time(14, 30)
time_break = time(0, 30)

t1 = datetime.combine(date.today(), time_to)
t2 = datetime.combine(date.min, time_from) - datetime.min
t3 = datetime.combine(date.min, time_break). - datetime.min

diff = (t1 - t2) - t3
convert_to_time = diff.time()

>>> t1
datetime.datetime(2021, 6, 25, 14, 30)

>>> t2
datetime.timedelta(seconds=28800)

>>> t3
datetime.timedelta(seconds=1800)

>>> diff
datetime.datetime(2021, 6, 25, 6, 0)

>>> diff.time()
datetime.time(6, 0)
>>> print(diff.time())
06:00:00

I hope so help you.

Elodie
  • 1