[英]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.