Как получить количество записей в модели в django rest framework?

Я использую GenericAPIView и сериализатор в модели для получения данных из таблиц. Теперь я не могу понять, как я могу получить количество записей из таблицы в моем rest api.

Ниже приведен пример кода, в котором я получаю записи

urls.py

urlpatterns = [
       path('ContactList/<int:user>/',views.ContactList.as_view()),
]

views.py

class ContactList(GenericAPIView, ListModelMixin):
    def get_queryset(self):
       username = self.kwargs['user']
       return Contacts.objects.filter(user=username).order_by('-last_message')
    serializer_class = ContactSerializer
    permission_classes = (AllowAny,)

    def get(self, request , *args, **kwargs):
        return self.list(request, *args, **kwargs)

Serializers.py

class ContactSerializer(serializers.ModelSerializer):
    class Meta:
        model = Contacts
        fields = ['id','user','Contact_id','last_message']

В приведенном выше коде я получаю все контакты определенного пользователя. Теперь как я могу получить количество записей (контактов), относящихся к этому пользователю.

например, если я пошлю пользователю 11 в URL, я должен получить количество записей, где user=11

Django Rest предлагает несколько способов фильтрации возвращаемого кверисета

  1. Использование параметра запроса :

Здесь у вас есть путь типа : path('ContactList/',views.ContactList.as_view()),

И хотим запросить url следующим образом : localhost:8000/contact_list?user=11

Вам нужно определить ваш get_queryset следующим образом :

  def get_queryset(self):
      queryset = Contacts.objects.all()
      
      # If we have user in query parameter then
      user = self.request.query_params.get('user')
      if user is not None:
          queryset = queryset.filter(user__id=user)
      
      # Return the queryset
      return queryset
          
  1. Использование параметра url :

У вас есть такой путь : path('ContactList/<int:user>/',views.ContactList.as_view()),

И хотим запросить url следующим образом : localhost:8000/contact_list/11

Вам нужно определить свой get_queryset следующим образом :

def get_queryset(self):
    user = self.kwargs['user']
    return Contacts.objects.filter(user__id=user)

если я правильно понимаю, вам нужно вернуть # записей помимо контактов вы можете переопределить метод list и сделать следующее

 def list(self, request, *args, **kwargs):
        queryset = self.filter_queryset(self.get_queryset())

        page = self.paginate_queryset(queryset)
        if page is not None:
            serializer = self.get_serializer(page, many=True)
            return self.get_paginated_response(serializer.data)

        serializer = self.get_serializer(queryset, many=True)
        count = queryset.count()
        return Response({"count":count, "data":serializer.data})

также вы можете добавить пагинацию, это решит проблему

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