【发布时间】:2022-08-19 04:29:36
【问题描述】:
我没有建立关于类似于 Snapchat 的连拍功能的逻辑。以下是在snapchat 中计算连胜的方式 问题是。 如果用户每 24 小时添加一次新数据记录,则无论他/她添加多少条记录,连续为 1,如果他/她在下一个时间段内未能添加并在接下来的 24 小时时间范围内添加 +1,则连续为 0从添加的最后一条记录开始。
如果用户添加答案而不是保持连胜,则连胜实际上是基于用户和答案的。
我在 django 中尝试了这段代码,但任何语言的任何帮助都是有价值的
class ModelAnswer(BaseModel):
questions = models.ForeignKey(
to=Questions,
on_delete=models.CASCADE
)
answer = models.TextField()
user = models.ForeignKey(User, on_delete=models.CASCADE)
current_streak = models.PositiveIntegerField(
null=True,
blank=True,
default=0,
editable=False
)
这是我的主要逻辑部分,这不能按要求工作
def save(self, *args, **kwargs):
today = timezone.now()
yesterday = today - timedelta(days=1)
print(today,yesterday)
# get the categories created yesterday to maintain the streak
answers_created_yesterday = ModelAnswer.objects.filter(
Q(created_at__gte=yesterday),
Q(created_at__lt=today),
user=self.user
).order_by(\'-id\').last()
if answers_created_yesterday is not None:
self.current_streak = answers_created_yesterday.current_streak + 1
else:
self.current_streak = 1
print(self.current_streak)
super(ModelAnswer, self).save(args, kwargs)
-
更详细地解释你的问题。是为用户添加条纹还是为答案添加?用户是否必须与答案交互才能获得连胜?简而言之,解释在你的情况下条纹应该如何工作。
-
如果用户添加答案@Art,则实际上会添加条纹
-
那么,
current_streak字段在用户模型上更好,而不是在答案上。 -
哦,我的错 :( 无论如何我可以实现
-
如果用户在接下来的 24 小时内未添加答案,则连续性是否会回落到 0,或者连续性是否保持不变?
标签: python django django-models