更改模型字段时更新django任务

更改模型字段时更新django任务,django,django-models,django-signals,Django,Django Models,Django Signals,我有一个django模型,其中包含特定预订的特定任务(电子邮件提醒)应在何时运行的详细信息 看起来有点像这样:- class Task(models.Model): PENDING = 'pending' IN_PROGRESS = 'in_progress' COMPLETE = 'complete' STATES = ( (PENDING, 'Pending'), (IN_PROGRESS, 'In Progress'),

我有一个django模型,其中包含特定预订的特定任务(电子邮件提醒)应在何时运行的详细信息

看起来有点像这样:-

class Task(models.Model):
    PENDING = 'pending'
    IN_PROGRESS = 'in_progress'
    COMPLETE = 'complete'
    STATES = (
        (PENDING, 'Pending'),
        (IN_PROGRESS, 'In Progress'),
        (COMPLETE, 'Complete')
    )

    run_at = models.DateTimeField()
    state = models.CharField(max_length=50, choices=STATES, default=PENDING)

    class Meta:
        ordering = ['run_at']
当预订日期更改时,我希望更新相应任务的run_

据我所知,有几种方法可以做到这一点:-

  • 在视图代码中
  • 在任务模型的保存方法中
  • 使用信号
  • 总的来说,我认为使用视图代码是最有意义的——这样更显式。但是我使用的代码非常古老,预订日期可以从各种地方以各种方式更改,我不相信我可以100%确定我已经抓住了每一个可能发生这种情况的地方。如果我遗漏了任何内容,在这种情况下任务将不会更新

    另外,如果其他人添加了更改预订日期的代码,他们必须知道如何更新任务


    那么,使用save方法更有意义吗?或者尽我所能彻底地找到所有可以更改预订日期的地方?

    信号是为此类任务而设计的,对于您的情况,我相信使用信号是最好的方式

    正如您所建议的,使用视图代码会带来必须在多个位置更新代码的问题,未来的开发人员在添加更改预订日期的代码时也必须记住这些限制。所以这不是解决这个问题的好办法

    重写任务模型的save方法也是一个可行的解决方案,但由于信号是为此类任务设计的,因此从代码风格上看,这将是一个更好的选择