У меня есть структура модели, подобная этой:
class Author(models.Model):
name = models.CharField(max_length=100)
age = models.IntegerField()
class Book(models.Model):
published = models.DateTimeField()
name = models.CharField(max_length=300, unique=True)
authors = models.ForeignKey(Author)
category = models.ForeignKey(Category)
class Category(models.Model):
name = models.CharField(max_length=100)
Я хотел подсчитать Books
по каждому автору. Это было легко, потому что я мог сделать: Author.objects.values('name').annotate(count=Count('book'))
.
У меня много трудностей при расчете:
- количество уникальных категорий на автора.
- среднее количество книг, написанных в категории автором
- (Это сложный вопрос). Средняя продолжительность между первой и последней книгой, написанной автором в категории.
Я не гуру запросов ORM, и если бы мне пришлось решать эту проблему, я бы, вероятно, в конечном итоге использовал бы много циклов и других итераций для вычисления этого, но я знаю, что это неправильный способ сделать это .
(Я знаю, что некоторые вещи в этом сценарии странные, например, уникальное ограничение имени автора, но это был лучший пример, который я нашел, чтобы проиллюстрировать мою проблему.)
Любая помощь о том, как я мог бы сделать это?
Спасибо.