我有两个型号
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中做到这一点?谢谢!
答案 0 :(得分:0)
试试这个并检查它是否符合您的要求:
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)
答案 1 :(得分:0)
原来这很简单。
您可以使用相关表格中的字段注释模型的查询,并使用它进行订购或执行其他操作。
我的问题代码:
item = Item.objects.all()
itemsrc = item.annotate(rating=Avg('itemrating__score')).order_by('rating')
查看文档以获取更多详细信息 https://docs.djangoproject.com/en/2.0/topics/db/aggregation/#joins-and-aggregates