#python-3.x #django #django-rest-framework
Вопрос:
У меня есть urlpatterns = [path('collection/<int:pk>/video/', CollectionVideoViewSet.as_view(),name='collection-videos')]
.
И ListAPIView
:
class CollectionVideoViewSet(ListAPIView):
"""ViewSet for operation with videos in collection"""
permission_classes = (IsAuthenticated,)
queryset = Video.objects.all()
serializer_class = CollectionVideoSerializer
Могу ли я отфильтровать набор запросов в этом представлении по pk
?
Итак, я хочу, чтобы в выходных данных было количество, следующие, предыдущие поля
Ответ №1:
Вам нужно переопределить get_queryset
метод:
class CollectionVideoViewSet(ListAPIView):
"""ViewSet for operation with videos in collection"""
permission_classes = (IsAuthenticated,)
queryset = Video.objects.all()
serializer_class = CollectionVideoSerializer
def get_queryset(self):
# Assuming your `Video` model has a many-to-one relation to `Collection`
return self.queryset.filter(
collection__pk=self.kwargs['pk']
)
Чтобы ваше представление возвращало результат с разбивкой по страницам, т. е. количество, следующий, предыдущий, вам необходимо определить a pagination_class
в своем представлении:
from rest_framework.pagination import PageNumberPagination
class CollectionVideoViewSet(ListAPIView):
pagination_class = PageNumberPagination
Подробнее о разбиении на страницы в DRF
Ответ №2:
Да, переопределите метод get_queryset для ListAPIView
class TeamList(generics.ListAPIView):
serializer_class = TeamSerializer
def get_queryset(self, *args, **kwargs):
sc = EmployeeSearchCriteria(email=self.kwargs["email"], role=Employee.VIEWER)
return EmployeeCalculatorService().get_team_by_employee(sc)
Комментарии:
1. в этой ситуации будут ли у меня поля «количество», «следующий», «предыдущий» в возвращаемой информации?
2. да, это делается с помощью разных методов, которые вы не переопределяете