Django rest api как ответить на сериализованный набор запросов

У меня есть 3 модели:

class Book_type(models.Model):
    type_name = models.CharField(max_length=40,unique=True)

class Author(models.Model):
    author_id = models.AutoField(unique=True, primary_key=True) 
    author_name = models.CharField(max_length=30, unique=True)

  
class Book(models.Model):
    book_id = models.AutoField(unique=True, primary_key=True)
    book_type = models.ForeignKey(book_type, on_delete=models.CASCADE,
                                   to_field='type_name')
    book_value = models.PositiveIntegerField(default=0, verbose_name='book value')
    book_unit = models.CharField(max_length=100, blank=True,
                                  verbose_name='book unit')
    book_time = models.DateTimeField(auto_now=False, verbose_name='book time')
    author = models.ForeignKey(verbose_name='author', to='author', to_field='author_id', on_delete=models.CASCADE)

Как тип книги, так и автор являются внешними ключами к Book.

Теперь в файле views.py я хочу вернуть следующую совокупную статистику для каждого автора:

1.mininum book value, grouped by author and book type

2.average book value, grouped by author and book type

3.And annotate each set of aggregate statistics with the author's ID and name.

Код:

from .serializers import BookSerializer,AuthorSerializer,Book_typeSerializer

class AggregateListView(ListAPIView):
    """Custom queryset api view. Does not implement pagination"""
    queryset = author.objects.values('author_name', 'author_id')\
        .annotate(min_value=Min('book__book_value'), distinct=True)\
        .annotate(max_value=Max('book__book_value'), distinct=True)\
        .annotate(avg_value=Avg('book__book_value'), distinct=True)\
        .annotate(count=Count('book__book_id'), distinct=True)\
        .annotate(earliest_time=Max('book__book_time'), distinct=True)\
        .annotate(lastest_time=Min('book__book_time'), distinct=True)

   serializer = AuthorSerializer(queryset, many=True)
   data = serializer.data
   return data["json"]

Пока кодирую здесь, я совершенно не знаю, как продолжить, любой друг может помочь?

Вернуться на верх