如何从 Django 中的一组对象中获取平均值?
我有一个简单的房产评级系统。您给它打分,满分 5 分(星)。模型的定义如下:
def Property(models.Model)
# stuff here
def Rating(models.Model)
property = models.ForeignKey(Property)
stars = models.IntegerField()
我想要做的是获取一个属性,找到所有评级对象,收集它们,然后从中获取平均“星星”。
有什么想法如何做到这一点?
I have a simple rating system for a property. You give it a mark out of 5 (stars). The models are defined like this
def Property(models.Model)
# stuff here
def Rating(models.Model)
property = models.ForeignKey(Property)
stars = models.IntegerField()
What I want to do is get a property, find all the Rating objects, collect them, then get the average 'stars' from them.
Any ideas how to do this?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
您应该使用 Aggregation(doc):
有点不确定我的例子虽然。
You should use Aggregation(doc):
A little bit unsure about my example though.
您可以使用 aggregate() 和 annotate() 与 < a href="https://docs.djangoproject.com/en/4.1/ref/models/querysets/#avg" rel="nofollow noreferrer">Avg() 来平均
Rating 中的星星
模型和属性按属性如下所示。 *我需要将order_by('pk')
与annotate()
一起使用,否则值按降序打印:然后,以下内容将输出在控制台上:
并且,您可以将 stars 列的默认键
stars__avg
更改为starsAvg
,如下所示:然后,默认键更改如下:
You can use aggregate() and annotate() with Avg() to average the stars in
Rating
model and property by property as shown below. *I need to useorder_by('pk')
withannotate()
otherwise values are printed in descending order:Then, these below are outputted on console:
And, you can change the default key
stars__avg
for stars column tostarsAvg
as shown below:Then, the default key is changed as shown below: