我有一个模型,我要从中获取最新值(即最新添加的项目中的值)以及一段时间内的汇总值。我可以在单独的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。
谢谢!
答案 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>