【问题标题】:Django annotate with aggregated average valueDjango用聚合平均值注释
【发布时间】:2015-12-29 06:56:36
【问题描述】:

在以下来自 django 文档的示例中,如何获取

Publisher.objects.all()

注释字段 average_rating 使用书籍评分的平均值计算,max_rating 使用书籍的最高评分计算?

from django.db import models

class Author(models.Model):
    name = models.CharField(max_length=100)
    age = models.IntegerField()

class Publisher(models.Model):
    name = models.CharField(max_length=300)
    num_awards = models.IntegerField()

class Book(models.Model):
    name = models.CharField(max_length=300)
    pages = models.IntegerField()
    price = models.DecimalField(max_digits=10, decimal_places=2)
    rating = models.FloatField()
    authors = models.ManyToManyField(Author)
    publisher = models.ForeignKey(Publisher)
    pubdate = models.DateField()

class Store(models.Model):
    name = models.CharField(max_length=300)
    books = models.ManyToManyField(Book)
    registered_users = models.PositiveIntegerField()

确切地说,我应该能够在查询集之后打印这样的内容:

for p in Publisher.objects.all().annotate(...):
    print p, p.average_rating, p.max_rating

【问题讨论】:

    标签: python sql django django-queryset


    【解决方案1】:

    您可以像这样使用book__rating 访问出版商的书籍:

    Publisher.objects.annotate(average_rating=Avg('book__rating'), max_rating=Max('book__rating'))
    

    【讨论】:

    • FieldError:无法将关键字“books_set”解析为字段。选项有:book、id、name、num_awards
    猜你喜欢
    • 2016-01-30
    • 2016-11-18
    • 1970-01-01
    • 1970-01-01
    • 2016-04-26
    • 1970-01-01
    • 2021-08-12
    • 2017-07-21
    • 2020-05-23
    相关资源
    最近更新 更多