在我的models.py中,我有这个课程。
import time
class Ticket(models.Model):
username = models.CharField(max_length=50)
booking_time = time.time()
expired = models.BooleanField(default=False)
如果自booking_time
起已经过了1个小时,我希望过期的布尔值变为true,但是我不知道应该在哪里检查同一件事(我当时想在views.py
,但只有当我们转到某个URL时才会调用视图,就我而言,我想每小时检查一次。
答案 0 :(得分:2)
如果您希望在Django的后台运行类似脚本的内容,则可以在应用程序文件夹中创建例如script.py。在该代码中,您甚至可以拥有
def main()
while True:
....
然后,您必须转到wsgi.py(在项目文件夹中)并导入脚本。 就像
import os
import threading
from django.core.wsgi import get_wsgi_application
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'weather_raspi.settings')
t = threading.Thread(target=main, args=(args)) #here will you give the function as task and arguments into args
t.start() #this line starts the function
application = get_wsgi_application()
这应该可以正常工作 希望你这次能得到它
答案 1 :(得分:1)
另一种解决方案是将模型更改为使用expiration_time而不是过期的布尔值,然后可以定义一个检查expiration_time与now()的函数
class Ticket(models.Model):
...
expiration_time = models.DateTimeField()
def expired(self):
return self.expiration_time > datetime.now()
或作为查询:
expired_tickets = Ticket.objects.filter(expiration_time__gt=Now())
https://docs.djangoproject.com/en/3.1/ref/models/database-functions/#now