Аннотировать дополнительное поле, но показывать его только один раз в 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])