Django Aggregation聚合
在当今根据需求而不断调整而成的应用程序中,通常不仅需要能依常规的字段,如字母顺序或创建日期,来对项目进行排序,还需要按其他某种动态数据对项目进行排序。Djngo聚合就能满足这些要求。
以下面的Model为例
1 from django.db import models 2 3 class Author(models.Model): 4 name = models.CharField(max_length=100) 5 age = models.IntegerField() 6 7 class Publisher(models.Model): 8 name = models.CharField(max_length=300) 9 num_awards = models.IntegerField() 10 11 class Book(models.Model): 12 name = models.CharField(max_length=300) 13 pages = models.IntegerField() 14 price = models.DecimalField(max_digits=10, decimal_places=2) 15 rating = models.FloatField() 16 authors = models.ManyToManyField(Author) 17 publisher = models.ForeignKey(Publisher) 18 pubdate = models.DateField() 19 20 class Store(models.Model): 21 name = models.CharField(max_length=300) 22 books = models.ManyToManyField(Book) 23 registered_users = models.PositiveIntegerField()
快速了解
1 # books总数量. 2 >>> Book.objects.count() 3 2452 4 5 # Total number of books with publisher=BaloneyPress 6 >>> Book.objects.filter(publisher__name='BaloneyPress').count() 7 73 8 9 # books的平均price. 10 >>> from django.db.models import Avg 11 >>> Book.objects.all().aggregate(Avg('price')) 12 { 'price__avg': 34.35} 13 14 #