在 Django 中保存以前的日期并添加新日期

Saving previous date and adding new date in 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)