Аннотировать дополнительное поле, но показывать его только один раз в api ответе в django rest

Мне нужно добавить дополнительное поле с помощью annotate в get api. Поле представляет собой что-то вроде count поля всех объектов, а не конкретного объекта. И я хочу, чтобы оно появлялось только один раз в ответе get api. Если я использую annotate, оно появляется в ответе всех объектов. Как этого можно добиться?

Моя модель:

class Package(models.Model):
    location = models.CharField()
    bought_times = models.IntegerField(default=0)
    /....................../

Теперь, если я использую аннотацию примерно так:

qs = Package.objects.filter(....).annotate(whole_bought_counts=Sum("bought_times") or some logic)

В ответе это будет выглядеть следующим образом:

{
id = 1,
localtion = Paris,
bought_times = 22,
whole_bought_counts =72,
}
{
id = 1,
localtion = Miami,
bought_times = 16,
whole_bought_counts =72,
}
id = 1,
localtion = Switzerland,
bought_times = 24,
whole_bought_counts =72,
}

Мне нужно, чтобы счетчик whole_bought_counts появлялся только один раз, потому что счетчик используется только для информации на приборной панели. Появление несколько раз заставит его появиться 100+ раз, что сделает api довольно медленным. не так ли?

Дополнительные данные могут быть добавлены к ответу набора представлений. Например,

class PackageViewSet(ModelViewSet):

   model = Package
    serializer_class = PackageSerialzer
    queryset = Package.objects.all()

    def get_queryset(self):
        qs = Package.objects.filter(...) # Whatever you want your qs to be
        return qs

    def list(self, request):
        queryset = self.get_queryset()
        serializer = self.serializer_class(queryset, many=True)

        addional_data = {
            'my_data': ... # Any data, from your queryset or else
        }
        
        return Response([addional_data, serializer.data]) 
Вернуться на верх