Нужен ли нам набор запросов в CreateAPIView?

Мой вопрос довольно прост. На самом деле я не уверен, что queryset необходим для CreateAPIView или нет...

class CreateNotificationAPIView(generics.CreateAPIView):
    """This endpoint allows for creation of a notification"""
    queryset = Notification.objects.all() #can we remove it, if we do so, will we face any issue in future ?
    serializer_class = serializers.NotificationSerializer

согласно REST_docs

queryset - Набор queryset, который должен использоваться для возврата объектов из данного представления. Как правило, вы должны либо установить этот атрибут, либо переопределить метод get_queryset(). Если вы переопределяете метод представления, важно важно, чтобы вы вызывали get_queryset(), а не обращались к этому свойству свойству напрямую, так как queryset будет оценен один раз, и эти результаты будут кэшироваться для всех последующих запросов.

Нет. Единственный метод HTTP, который предлагает CreateAPIView [drf-doc] - это метод POST, и он реализует его, вызывая метод create. Метод .create(…) реализован как [GitHub]:

def create(self, request, *args, **kwargs):
    serializer = self.get_serializer(data=request.data)
    serializer.is_valid(raise_exception=True)
    self.perform_create(serializer)
    headers = self.get_success_headers(serializer.data)
    return Response(serializer.data, status=status.HTTP_201_CREATED, headers=headers)

Эти методы работают только с сериализатором, или с self.perform_create и self.get_success_headers, которые по умолчанию работают только с данными сериализатора.

Если вы таким образом не переопределите методы CreateAPIView, чтобы как-то использовать кверисет, вы можете определить CreateAPIView без определения queryset или переопределить get_queryset.

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