Как рассчитать часы и часы OT, сохранить в базе данных? - PullRequest
0 голосов
/ 25 марта 2020

Я пытаюсь рассчитать вход и выход из системы и преобразовать его в общее количество часов. Если время превышает 9 часов, следует рассчитать OThours. Затем сохраните общее количество часов и OThours в моей модели. Как я могу go обойти это? Я знаю, что это с помощью свойства, но я не уверен, как получить правильный синтаксис с этим.

Мне просто нужен совет и понимание того, что делать, любая помощь приветствуется TIA.

Вот мой код:

testuser = models.ForeignKey(User,on_delete = models.CASCADE,unique_for_date= 'reportDate')
status = models.CharField(max_length=30, choices=STATUS_CHOICES,null=True)
reportDate = models.DateField(blank=False, null=False)
login = models.TimeField(blank=False, null=False)
logout = models.TimeField(blank=False, null=False)
totalHours = models.DecimalField(max_digits=4,decimal_places=2,null=True)
OTHours = models.DecimalField(max_digits=4,decimal_places=2,null=True)
mainTasks = models.CharField(max_length=50, blank=False, choices=TASKS_CHOICES, null=True)
remarks = models.CharField(max_length=30,null=True)

def __str__(self):
    return f'{self.testuser.full_name} DPR Log'

@property
def CalculateTotalHours(self):
    self.totalHours = self.logout.timeDelta - self.login.TimeDelta
    return self.TotalHours

@property
def OTHours(self):
    if self.totalHours > 9.00:
        self.OTHours = self.totalHours-9.00

1 Ответ

1 голос
/ 25 марта 2020

Я бы не использовал свойство для изменения экземпляра. Это плохой интерфейс, так как большинство пользователей ожидают, что свойство будет просто читать и возвращать данные.

Вот что я бы сделал:

class MyModel(models.Model):

    @classmethod
    def calculate_hours(cls, instance):
        total_hours = instance.logout.timedelta - self.login.timedelta
        ot_hours = None
        if total_hours > 9:
            ot_hours = total_hours - 9.00
            total_hours = 9.00
        return total_hours, ot_hours

# Then to use it:
instance = MyModel.objects.get(something)
instance.total_hours, instance.ot_hours = MyModel.calculate_hours(instance)
instance.save()
...