首页 > 解决方案 > 使用 django 后台任务自动将数据库字段更新为 True

问题描述

我有一个具有字段的模型作业filled。如果当前日期和时间大于或等于作业的结束日期和时间,filled我想自动更新。True创建作业时设置结束日期。我正在使用 Django 后台任务来检查数据库中的所有作业并始终重复该过程,但我无法让它工作。这是我的代码

模型.py

class Job(models.Model):
    # title, description, requirements, job type etc.
    end_date = models.DateTimeField()
    current_date = models.DateTimeField(null=True, blank=True)
    filled = models.BooleanField(default=False)
    created_at = models.DateTimeField(default=timezone.now)

    def __str__(self):
        return self.title

任务.py

@background(schedule=60)
def auto_mark_as_filled(job_id):
    jobs = Job.objects.filter(pk=job_id, filled=False)
    for job in jobs:
        job.current_date = timezone.localtime(timezone.now())
        if job.current_date >= job.end_date:
            job.filled = True
            job.save()

我正在从我的 forms.py 中调用该任务。当我创建一个新工作时,我会注册它。

表格.py

class CreateJobForm(forms.ModelForm):

   # class meta fields widgets etc

    def save(self, commit=True):
        job = super(CreateJobForm, self).save(commit=False)
        job.save()
        auto_mark_as_filled(job.id, repeat=60, repeat_until=None) # right here, repeat every 60seconds
        return job

但是当当前日期大于或等于结束日期时,什么都不会发生。我真的不知道我在做什么错任何帮助将不胜感激。

更新

所以我发现python manage.py process_tasks需要运行命令以查看创建新任务后是否有新任务要运行。python manage.py process_tasks每次在生产中创建新任务时在终端中手动运行是不对的。必须有一种方法来保持该命令在 te 服务器中运行。

标签: djangodjango-modelsdjango-formsbackground-task

解决方案


推荐阅读