根据天数更新现有数据 - DJANGO

Update existing data based on days - DJANGO

我的项目有一个问题,无法根据时间更新列字段。也就是说,我将通过表单插入数据并填写日期字段,我希望在几天内更新特定字段。例如,如果自从我将表格插入数据库后 10 天过去了,我希望在 11 日将未结订单的状态更改为延迟。我试图覆盖保存方法,但它只在我编辑表单并保存或插入表单时有效,但这不是我的目标。

models.py:

class Order(models.Model):
     name = models.CharField(max_lenght = 100)
     data_start = models.DateField(default=date.today)
     status = models.Charfield(
         max_length=50,
         default='Open',
         choices=(
            ('Open', 'Open'),
            ('Late', 'Late'),

)



     def save(self, *args, **kwargs):
            days_for_late = datetime.timedelta(days=15)
            late = self.data_start + days_for_late
            today = datetime.date.today()
            if today > late:
                self.status = 'Late'
                super(Order, self).save(*args, **kwargs)

我在这个阶段停留了好几天,在网站上阅读了很多类似的问题,但我无法解决。大多数人都在谈论覆盖保存方法,这对我的问题不起作用

您尝试执行的操作称为 异步 task/function/job - 运行 在您的服务器上运行而无需用户交互的功能。

Django version < 3.0 无法自行处理此类功能。甚至版本 > 3.0 都 not 完全涵盖异步任务。所以你有两个选项可以适应你的代码

  1. 如果你会有更多的异步函数,尝试使用与 Django 兼容的异步库之一,比如 Celery. Celery has very nice tutorial on how to easily make your own async task. Or you can use this answer from similar

  2. 另一个选项可能是 crontab - a scheduler for execution of files in linux. Just create custom manage.py command 里面有你的更新状态脚本,运行 它在 crontab 中,启用了你的虚拟环境