Очевидно, что класс TimeClock - сам по себе - не подходит для того, что вы делаете.
Вам необходимо суммировать TimeClock для создания WorkIntervals, с которыми вы можете работать. Это пары строк TimeClock, которые показывают (теоретический) начало и конец рабочего периода.
Если кто-то не успевает вовремя, вы совершенно не можете понять, что происходит.
Это не «сложно», это невозможно.
Кроме того, если кто-то работает после полуночи, вы не можете понять, что происходит.
Это не «сложно», это невозможно.
Но мы притворимся, что никто не работает после полуночи, и никто не может войти или выключиться (хахаха)
def make_pairs( tc_query_set ):
start = None
for row in tc_query_set:
if start is None:
start= row
continue
elif start.card == row.card and start.rec_date == row.rec_date:
yield start, row
start= None
else:
# May as well raise an exception -- the data cannot the processed
yield start, None
start= row
Вы используете это следующим образом.
data = TimeClock.objects.order_by('card','rec_date','rec_time').all()
for start, end in make_pairs( data ):
WorkIntervals.objects.create( start.card, start.rec_date, start.rec_time, end.rec_time, ... )
Теперь вы можете работать с интервалами. Если бы было возможно их создать.