要按外键字段值对Django对象进行分组,可以使用Django的annotate()和values()方法结合使用。下面是一个示例代码:
首先,假设我们有两个模型,一个是Author(作者),一个是Book(书籍),它们之间是一对多的关系。
from django.db import models
class Author(models.Model):
name = models.CharField(max_length=100)
def __str__(self):
return self.name
class Book(models.Model):
title = models.CharField(max_length=100)
author = models.ForeignKey(Author, on_delete=models.CASCADE)
def __str__(self):
return self.title
接下来,我们可以按照作者对书籍进行分组,找出每个作者出版的书籍数量。可以使用以下代码:
from django.db.models import Count
books_by_author = Book.objects.values('author__name').annotate(total_books=Count('id'))
for author in books_by_author:
print(author['author__name'], author['total_books'])
这里的代码使用values方法指定按照作者的名字进行分组,并使用annotate方法来计算每个分组的书籍数量。
输出结果将会是每个作者的名字和他们出版的书籍数量。
注意:在values方法中,我们指定了'author__name'
,这是因为外键字段的值可以通过双下划线进行访问。如果外键字段有多层关联,可以使用多个双下划线进行访问。