Skip to main content
 首页 » 编程设计

python之Django 用聚合平均值注释

2025年05月04日43itcoder

在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 

请您参考如下方法:

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

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