Как вы получаете количество записей в таблице через сквозную таблицу, которые связаны в обратном направлении?
РЕДАКТИРОВАТЬ: я упростил модели.
Как узнать, сколько раз автор цитирует других авторов? Я бы предпочел сделать это из объекта self
, если это возможно, но если нет, я мог бы использовать annotate()
или aggregate()
. Но как?
Мои модели
class Author(models.Model):
name = models.CharField(max_length=100)
@property
def times_quoted_by_other_authors(self):
return self.authors_quoted_books.count()
@property
def times_quoted_other_authors(self):
pass
# What do I return here
class Book(models.Model):
name = models.CharField(max_length=300)
author = models.ForeignKey(
Author, on_delete=models.CASCADE, related_name='author_books',
null=True
)
authors_quoted = models.ManyToManyField(
Author,
related_name='authors_quoted_books'
)
Запрос SQL для times_quoted_other_authors
:
SELECT COUNT(*) AS times_quoted_other_authors
FROM authors_book_authors_quoted
WHERE book_id IN (SELECT id
FROM authors_book
WHERE author_id = 1);