繁体   English   中英

Django:通过相关表中的AVG()字段查询订单

[英]Django: Order query by AVG() field in related table

我有两个模型

class Item(VoteModel, models.Model):
    **some_fields**

class ItemRating(models.Model):
    score = models.IntegerField(default=0)
    item_id = models.ForeignKey(Item)

我想从ItemRating订购Averadge分数进行的项目查询

在SQL中,它将是这样的

SELECT it.*, AVG(ir.score) as rating FROM Item it, ItemRating ir WHERE it.id = ir.item_id ORDER BY rating;

如何在django中做到这一点? 谢谢!

只需尝试一下并检查它是否满足您的要求:

from django.db.models import Avg
frst = Item.objects.value_list('id', flat=True)  
scnd = ItemRating.objects.filter(
      item_id__in=frst).annotate(rating=Avg('score')).order_by('rating').values_list('rating', flat=True)

原来这很简单。

您可以使用相关表中的字段注释模型查询,并对其进行排序或其他操作。

代码到我的问题:

item = Item.objects.all()               
itemsrc = item.annotate(rating=Avg('itemrating__score')).order_by('rating')

查看文档以获取更多详细信息。
https://docs.djangoproject.com/zh-CN/2.0/topics/db/aggregation/#joins-and-aggregates

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM