Для вашего запроса на отпуск, почему бы вам не сохранить что-то вроде: start_date и end_date
Идея состоит в том, чтобы (в идеале) хранить только то, что вы не можете вычислить.
Тогда выможет создать свойство python , которое вычисляет количество дней между start_date и end_date (для свойства будет достаточно "fget").Свойство python не будет храниться в вашей базе данных, но это не имеет большого значения, потому что вы можете его вычислить!Так что вам не нужно его хранить.
days = property(fget=_get_days, doc="type: Integer")
Это означает, что всякий раз, когда к атрибуту "days" объекта "Leave" обращаются, вызывается функция "_get_days" для получения того, что вы хотите.
Если self
представляет объект Leave, и вы делаете print(self.days)
, то он напечатает результат _get_days
finally.
Часть "doc" здесь, чтобы указать, что ваше свойство возвращаетInteger.Это не обязательно, но это хорошая практика, чтобы не забывать об этом.
Тогда вы должны написать этот метод "_get_days" (он должен быть выше определения вашего свойства, иначе Python не будет знать, что такое "_get_days"
def _get_days(self):
return self.end_date - self.start_date
(something like that, that you convert into an int somehow)
Более того, для вашей дополнительной функциональности вы должны знать, сколько у вашего пользователя может быть оставлено. Просто сохраните это для пользователя, в вашей пользовательской команде или что вы хотите. Затем, чтобы проверить, есть ли у пользователя оставшиесялистья, которые он может взять, просто просмотрите набор запросов со всеми принятыми им листьями и используйте свойство, упомянутое выше. Затем вы вычтите результат из общего количества листьев, которые может взять пользователь.