【问题标题】:Update django task when model field is changed更改模型字段时更新 django 任务
【发布时间】:2020-01-26 19:33:22
【问题描述】:

我有一个 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_at时间。

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

  1. 在视图代码中。
  2. 在任务模型的保存方法中。
  3. 使用信号。

一般来说,我认为使用视图代码最有意义——这样更明确。但是我正在使用的代码非常旧,预订日期可以从各种地方以各种方式更改,我不相信我可以 100% 确定我已经抓住了每个地方这可能发生。如果我错过了任何一个,在这种情况下任务将不会更新。

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

那么使用 save 方法是否更有意义?或者只是尝试尽可能彻底地找到所有可以更改预订日期的地方?

【问题讨论】:

    标签: django django-models django-signals


    【解决方案1】:

    信号是为此类任务而设计的,在您的情况下,我相信使用信号是最好的方法。

    按照您的建议,使用视图代码会带来必须在多个地方更新代码的问题,并且未来的开发人员在添加更改预订日期的代码时还必须牢记这些限制。所以这不是解决这个问题的好办法。

    覆盖任务模型的保存方法也是一个可行的解决方案,但由于信号是为此类任务设计的,因此在代码风格方面它会是一个更好的选择。

    【讨论】:

      猜你喜欢
      • 2018-05-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-26
      • 2021-02-07
      • 2019-04-06
      • 1970-01-01
      • 2015-12-30
      相关资源
      最近更新 更多