#django #django-models #many-to-many #django-orm
#django #django-модели #многие ко многим #django-orm
Вопрос:
Я использую Django 2.2
У меня есть две таблицы с отношением «Многие ко многим»
class Book(models.Model):
title = models.CharField(max_length=50)
authors = models.ManyToManyField(Author)
class Author(models.Model):
first_name = models.CharField(max_length=30)
last_name = models.CharField(max_length=40)
У меня есть список авторов first_name
author_names = ['john', 'parker', 'donald']
Как я могу получить количество книг, которые есть у каждого автора?
Ответ №1:
Один из способов — использовать:
from django.db.models import Count
Author.objects.values('first_name').annotate(count_books=Count('book'))
который вернет набор запросов, сгруппированный по Author
имени. В результате этого набора запросов вы также можете увидеть количество книг на основе first_name каждого Author
(например <QuerySet [{'first_name': 'john', 'count_books': 1}, {'first_name': 'parker', 'count_books': 3}]>
), и если вы хотите отфильтровать этот набор запросов, вы можете изменить его на:
Author.objects.filter(first_name__in=author_names).values('first_name').annotate(count_books=Count('book'))
Однако, если вы хотите посмотреть, сколько книг связано с каждым Author
объектом, вы можете сделать что-то вроде:
from django.db.models import Count
Author.objects.values('id').annotate(count_books=Count('book'))
Комментарии:
1. Спасибо, Рохан. Что, если у одной книги два автора. Будет ли эта книга учитываться для обоих авторов?
2. Пожалуйста, и ответ «да», он будет считать это для каждого пользователя, даже если у книги более одного автора.
3. как мы можем использовать Count(‘book’), если в таблице авторов столбца ‘book’ нет