我正在Django RF上构建REST Api,它代表了非常基本的社交网络。我有一个模型Post,其值Likes通过Like模型与许多用户相关。我的模特:
class Post(models.Model):
content = models.TextField()
created_on = models.DateTimeField(auto_now_add=True)
author = models.ForeignKey(CustomUser, on_delete=models.CASCADE,
related_name='posts')
likes = models.ManyToManyField(CustomUser,
related_name='likes',
through='Like')
class Like(models.Model):
author = models.ForeignKey(CustomUser, on_delete=models.CASCADE)
post = models.ForeignKey(Post, on_delete=models.CASCADE)
liked_on = models.DateTimeField(auto_now_add=True)
我需要在给定期间内每天汇总喜欢的统计信息。例如,请求看起来像这样analytics /?date_from = 2020-05-15&date_to = 2020-05-17
而且我需要给这样的东西:
[{
'date': 2020-05-15,
'likes': 5,
}, {
'date': 2020-05-16,
'likes': 7,
}, {
'date': 2020-05-17,
'likes': 10,
}]
我如何在Django中做到这一点?我应该查询仅具有喜欢列表的帖子模型吗?还是喜欢的模特?那应该是什么查询?
您应使用Django-Filter。然后在过滤器类中,添加以下过滤器:
date_from = filters.DateTimeFilter(field_name='liked_on', lookup_expr='gte')
date_to = filters.DateTimeFilter(field_name='liked_on', lookup_expr='lte')
然后,您可以按照指定的要求进行请求,但使用日期时间而不是日期。可以将fuilter类添加到LikesView