[英]how to know when an activity date has passed - django
所以我仍在我的待辦事項列表上,我想知道活動何時結束,以便將其標記為已過期。
我的意見.py
def progress(request):
activities = ToDo.objects.all()
today = timezone.localtime(timezone.now())
context = {
'activities' : activities,
'today' : today,
}
return render(request, 'percent.html', context)
在我的模板中,我將其設置為:
{% for activity in activities %}
{% if activity.end.date < today.date %}
{{activity}} <br>
{% endif %}
{% endfor %}
我要添加我的 models.py 以供參考
class ToDo(models.Model):
owner = models.ForeignKey(User, on_delete=models.CASCADE)
todo = models.CharField(max_length=50)
description = models.TextField(max_length=200, blank=True)
created = models.DateField(auto_now=True)
end = models.DateField()
start = models.DateField()
completed = models.BooleanField(default=False)
def __str__(self):
return f'{self.owner} - {self.todo}'
或者將過期的 boolean 字段添加到我的模型會更容易嗎? 我很混亂
注意:您需要使用Celery Beat作為調度程序。
import datetime
def expired_activity():
today = datetime.date.today()
expired_activity = ToDo.objects.filter(end=today)
if expired_activity:
expired_activity.update(completed=True)
如果您不想使用任何調度程序,您可以使用 ORM 管理器在另一個請求中獲取過期項目:
from django.db import models
class ToDoManager(models.Manager):
def active(self):
return self.excude(end__lt=today().date)
def expired(self):
return self.filter(end__lt=today().date)
class ToDo(models.Model):
owner = models.ForeignKey(User, on_delete=models.CASCADE)
todo = models.CharField(max_length=50)
description = models.TextField(max_length=200, blank=True)
created = models.DateField(auto_now=True)
end = models.DateField()
start = models.DateField()
completed = models.BooleanField(default=False)
objects = ToDoManager()
def __str__(self):
return f'{self.owner} - {self.todo}'
在您看來,您將以不同的請求獲得它們:
ToDo.objects.active()
ToDo.objects.expired()
或者您可以在從數據庫請求數據時通過設置過期標志和保存結果來更改管理器
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.