django - 在 Django 中午夜递减模型值
问题描述
我想每天在午夜将值 days_till_study 递减 1。
我目前的方法不是很优雅。有一个更好的方法吗?
from django.db import models
from django.utils import timezone
class Card(models.Model):
question = models.CharField(max_length=100)
answer = models.TextField()
date = models.DateTimeField(default=timezone.now)
creator = models.ForeignKey(User, on_delete=models.CASCADE)
decks = models.ManyToManyField(Deck)
days_till_study = models.IntegerField(default=1)
def __str__(self):
return self.question
def decrement_days_till_study(self):
if days_till_study < 1:
x = str(datetime.datetime.now())
if x[x[11:26]] == '00:00:00.000000':
days_till_study += 1
感谢您阅读本文。
解决方案
即时计算结果
如果您可以控制在数据库中存储的内容,最好将两天都存储在数据库中并根据它计算差异:
class Card(models.Model):
created_at = models.DateTimeField()
study_at = models.DateTimeField()
@property
def days_till_study(self):
return (self.study_at - self.created_at).days
通过 Celery 进行调度
如果您仍然需要按计划做某事(例如days_till_study
在午夜更新),您可以尝试django-cron库或其他基于 Celery 的解决方案。
通过 cron 进行调度
推荐阅读
- jquery - 单击父div时jQuery隐藏的跨度弹出窗口
- java - 如何计算设定时间的剩余小时数
- java - 如何从netbeans插入数据库
- build - 从预构建二进制文件(mono 和 gtk-sharp2 项目)构建 flatpak 包
- android - Android.database.sqlite.SQLiteException:没有这样的列:500.0(代码1)
- amazon-web-services - Route53域名在一个账户购买,在另一个账户有记录?
- api - 如何正确搜索(房地产交易标准又名 RETS)服务器?
- javascript - 为什么条件(三元)运算符不返回正确的值?
- python - 如何增加索引本身而不是索引中存储的值?
- python - 如何在 Python 中修复 ''if , else '' 命令?