[英]Django Consecutive Days and Max Consecutive days Query
我有一个以下模型。
class CategoryModel(BaseModel):
name = models.CharField(max_length=100)
icon = models.ImageField(upload_to=upload_icon_image_to)
description = models.CharField(max_length=100)
user = models.ForeignKey(User,on_delete=models.CasCade)
def __str__(self):
return self.name
基本思想是,当用户在一天内添加一个类别时,无论是 1 条记录还是 20 条记录,都被视为 1 条记录,如果用户再次添加新类别,则视为 +1 条记录,因此当前条条为 2如果用户连续添加 5 天,则最大连胜也是 2,因为它是最大连胜,所以连胜是 5 天。
我只想显示为
{
"current_streak":3,
"max_streak":12
}
这里当前的条纹是 3,但之前的条纹集是 12,所以它被认为是最大条纹任何想法我怎么能实现这个查询?
我建议几点:
.save()
方法或向CategoryModel
添加post_save
信号,以便您可以处理条纹逻辑。created_on
DateTime 字段。current_streak
和max_streak
至于跟踪条纹的实现,应该可以这样:
from datetime import datetime, timedelta
class User
...
def update_streak(self):
"""
When a category is created, check whether a category was created
yesterday or not. If it was then add +1 to the streak, otherwise set
the streak to 1. Then check if the max streak has been bested.
"""
today = datetime.now().date()
yesterday = today - timedelta(days=1)
# get the categories created yesterday to maintain the streak
categories_created_yesterday = self.categorymodel_set.filter(
created_on__gte=yesterday,
created_on__lt=today
)
if categories_created_yesterday.exists():
self.current_streak += 1
else:
self.current_streak = 1
if self.current_streak > self.max_streak:
self.max_streak = self.current_streak
self.save()
创建类别后,您可以调用category.user.update_streak()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.