Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/281.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django:按相关表中的AVG()字段进行订单查询_Python_Django - Fatal编程技术网

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查询吗?你能发布它的输出吗?我发现了如何做到这一点,谢谢你的帮助-你的回答引导我找到解决方案!