Python Django:按相关表中的AVG()字段进行订单查询
我有两种型号Python Django:按相关表中的AVG()字段进行订单查询,python,django,Python,Django,我有两种型号 class Item(VoteModel, models.Model): **some_fields** class ItemRating(models.Model): score = models.IntegerField(default=0) item_id = models.ForeignKey(Item) 我想按ItemRating中的平均分数排序项目查询 在SQL中,它将是这样的 SELECT it.*, AVG(ir.score) as ra
class Item(VoteModel, models.Model):
**some_fields**
class ItemRating(models.Model):
score = models.IntegerField(default=0)
item_id = models.ForeignKey(Item)
我想按ItemRating中的平均分数排序项目查询
在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')
查看文档了解更多详细信息。非常感谢您的回答。它接近于我需要的,但我需要来自Item model的字段,它将不适用于
scnd
变量。你能更新你的代码吗?你试过sql查询吗?你能发布它的输出吗?我发现了如何做到这一点,谢谢你的帮助-你的回答引导我找到解决方案!