Сохранение предыдущей даты и добавление новой даты в Django
Я работаю над приложением, где пользователь добавляет свои задачи, которые он должен выполнить, после добавления задачи он может обновить прогресс.
В моей модели есть поле даты, где пользователь должен ввести предполагаемую дату завершения работы.
Моя модель задачи
"""Creating KRA Based on Institutional Objectives"""
class KraBasedOnIo(models.Model):
io = models.ForeignKey(InstitutionalObjectives, on_delete=models.CASCADE, related_name='kra_io')
kra_title = models.CharField(max_length = 200)
kra_description = models.TextField()
kra_target = models.CharField(max_length=200)
kra_added_date = models.DateTimeField(auto_now_add=True)
estimated_date = models.????
Во время обновления прогресса, если пользователь хочет продлить сроки, я ищу вариант, где я могу сохранить его текущую предполагаемую дату завершения и добавить новую дату также.
Когда я отображаю его прогресс, я хочу показать его определенную дату завершения, а также расширенную дату завершения в шаблоне.
Я попробовал обойти проблему с помощью model.JSONField(), но не смог достичь цели.
Здесь нет ListField или DictionaryField, поэтому какое решение может быть лучше для этого?
Упростите задачу и создайте два разделенных поля:
class KraBasedOnIo(models.Model):
# ...
estimated_completion_date = models.DateTimeField(null=True, blank=True)
extended_completion_date = models.DateTimeField(null=True, blank=True)
Если вам нужно отслеживать все изменения даты завершения, я предлагаю вам создать новую модель
class CompletionDate(models.Model):
# ...
kra = models.ForeignKey(KraBasedOnIo, related_name='completion_dates', on_delete=models.CASCADE)
estimated_date = models.DateTimeField(auto_now_add=True)
А затем получить последнюю дату завершения для экземпляра KraBasedOnIo следующим образом:
my_last_completion_date = KraBasedOnIo.completion_dates.last()
Поэтому я бы использовал библиотеку django-simple-history для отслеживания различных обновлений этого поля.
"""Creating KRA Based on Institutional Objectives"""
class KraBasedOnIo(models.Model):
io = models.ForeignKey(InstitutionalObjectives, on_delete=models.CASCADE, related_name='kra_io')
kra_title = models.CharField(max_length = 200)
kra_description = models.TextField()
kra_target = models.CharField(max_length=200)
kra_added_date = models.DateTimeField(auto_now_add=True)
estimated_date = models.DateTimeField(default=timezone.now)
history = HistoricalRecords()
Затем в режиме просмотра вы можете увидеть другую версию, выполнив :
for record in kra_based_on_info.history.all():
print(record)