Сохранение предыдущей даты и добавление новой даты в 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)
Вернуться на верх