Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django会在特定时间间隔后自动更新记录_Django_Django Models - Fatal编程技术网

Django会在特定时间间隔后自动更新记录

Django会在特定时间间隔后自动更新记录,django,django-models,Django,Django Models,我有一个模型“Grade”,它有一个字段:“name”。我也有一个这个等级的例子。i、 e“一级”。有没有一种方法可以让我在给定的时间跨度(比如说一年)后自动将特定实例更新为“Grade 2”及其所有其他相关模型,然后在另一年后将其更改为“Grade 3”等等?您可以使用 使用芹菜,您可以将任务设置为在特定时间运行,这样您就可以将任务安排为在当前时间正好一年后运行。或者,如果愿意,您可以安排定期任务每天运行,检查过期的分级对象并更新它们。您可以使用 使用芹菜,您可以将任务设置为在特定时间运行,这

我有一个模型“Grade”,它有一个字段:“name”。我也有一个这个等级的例子。i、 e“一级”。有没有一种方法可以让我在给定的时间跨度(比如说一年)后自动将特定实例更新为“Grade 2”及其所有其他相关模型,然后在另一年后将其更改为“Grade 3”等等?

您可以使用


使用芹菜,您可以将任务设置为在特定时间运行,这样您就可以将任务安排为在当前时间正好一年后运行。或者,如果愿意,您可以安排定期任务每天运行,检查过期的分级对象并更新它们。

您可以使用


使用芹菜,您可以将任务设置为在特定时间运行,这样您就可以将任务安排为在当前时间正好一年后运行。或者,如果您愿意,您可以安排定期任务每天运行,检查过期的成绩对象并更新它们。

更好的方法是将名称字段替换为“class_of”字段,该字段包含学生预计毕业的整数年(例如“class of 2020”)。这样,无论何时进行计算:

MAX_GRADE - (student.class_of - CURRENT_YEAR)
你会得到当前的分数。无需运行计划作业等

为了使其更加优雅,在模型中进行上述更改后,我将在模型类中添加以下内容:

# At the top of models.py:
from django.utils import timezone


# Elsewhere in your model:
MAX_GRADE = 12


# In your model
@property
def name(self):
    return "Grade" + str(MAX_GRADE - (self.class_of - timezone.now().year))

这样,当您调用student.name时,它将始终显示正确的成绩。不利的一面是,您必须开始使用的类_进行查询,如果您计算的是大量学生的成绩,则效率会稍低。但与设置任务调度器和cron作业以及如果管理不当可能导致的错误相比,这是值得的

更好的方法是将name字段替换为“class_of”字段,该字段包含学生预计毕业的整数年(例如“class of 2020”)。这样,无论何时进行计算:

MAX_GRADE - (student.class_of - CURRENT_YEAR)
你会得到当前的分数。无需运行计划作业等

为了使其更加优雅,在模型中进行上述更改后,我将在模型类中添加以下内容:

# At the top of models.py:
from django.utils import timezone


# Elsewhere in your model:
MAX_GRADE = 12


# In your model
@property
def name(self):
    return "Grade" + str(MAX_GRADE - (self.class_of - timezone.now().year))
这样,当您调用student.name时,它将始终显示正确的成绩。不利的一面是,您必须开始使用的类_进行查询,如果您计算的是大量学生的成绩,则效率会稍低。但与设置任务调度器和cron作业以及如果管理不当可能导致的错误相比,这是值得的