Django获取最新值并汇总值

时间:2018-08-08 14:57:08

标签: python django django-models orm django-queryset

我有一个模型,我要从中获取最新值(即最新添加的项目中的值)以及一段时间内的汇总值。我可以在单独的QuerySet中获得答案,然后在Python中将它们组合在一起,但是我觉得应该有一个更好的ORM方法。有人知道怎么做吗?

简化示例:

Class Rating(models.Model):
     movie = models.ForeignKey(Movie, related_name="movieRatings")
     rating = models.IntegerField(blank=True, null=True)
     timestamp = models.DateTimeField(auto_now_add=True)

我希望获得过去一个月的平均评级和每部电影的最新评级。

当前方法:

recent_rating = Rating.objects.order_by('movie_id','-timestamp').distinct('movie')
monthly_ratings = Rating.objects.filter(timestamp__gte=datetime.datetime.now() - datetime.timedelta(days=30)).values('movie').annotate(month_rating=Avg('rating'))

然后我需要以某种方式将它们加入电影ID。

谢谢!

2 个答案:

答案 0 :(得分:1)

我建议您使用@property装饰器将属性方法(monthly_rating)添加到评分模型中,而不要在views.py中进行计算:

@property
def monthly_rating(self):
    return 'calculate your avg rating here'

答案 1 :(得分:0)

尝试基于Subquery expressions的此解决方案:

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.3/umd/popper.min.js"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/js/bootstrap.min.js"></script>
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css">
<script src="//www.amcharts.com/lib/3/amcharts.js"></script>
<script src="//www.amcharts.com/lib/3/pie.js"></script>
<script src="//www.amcharts.com/lib/3/themes/dark.js"></script>

<p>This is some test text. <br><span class="chart-tooltip" id="chart-tooltip" title="<p>Pie chart:</p> <div id='chartdiv'></div>" data-toggle="tooltip" data-placement="right">Hover here for a chart</span></p>