Django连续天数和最大连续天数查询



我有一个以下模型。

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,最大连胜也是2,如果用户连续添加5天连胜是5天,因为它是最大连胜。

我只想显示为

{
"current_streak":3,
"max_streak":12
}

这里的当前连胜是3,但之前的连胜集是12,所以它被视为最大连胜任何想法,我如何才能实现这个查询?

我有几点建议:

  1. 覆盖.save()方法或在CategoryModel中添加post_save信号,以便处理条纹逻辑。
  2. 跟踪类别创建时,这应该是一个简单的created_onDateTime字段。
  3. 跟踪用户模型上的current_streakmax_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()

相关内容

  • 没有找到相关文章

最新更新