Я использую Django REST Framework для создания конечной точки, которая будет создавать PDF-документ. Документ PDF будет содержать информацию, соответствующую определенному Department
. У меня есть две желаемые функции - возможность загрузки PDF-документа и возможность предварительного просмотра документа в браузере.Django REST Framework - не может переопределить список в ListAPIView
Поскольку документ PDF изменяется со временем на основе данных, добавленных в приложение, документ необходимо сгенерировать в реальном времени, когда он запрашивается. В качестве первого шага я пытаюсь иметь документ быть сгенерированы в удаленном месте хранения файлов при следующих конечных точек ударил по GET
запросу:
departments/<department_pk>/result/preview
Поскольку моя конечная точка должна принимать только GET
запросы, Я использую ListAPIView
. Я пытаюсь переопределить метод list
, чтобы моя логика генерации пользовательского документа выполнялась, но похоже, что метод никогда не вызывается. Как я могу добавить в конечную точку некоторую логику генерации документов, чтобы она выполнялась, когда конечная точка попала в запрос GET
?
апи/urls.py
url(r'^departments/(?P<department_pk>[0-9]+)/result/preview',
include(result_document_urls.result_document_preview_router.urls,
document_app/urls.py
result_document_preview_router = routers.DefaultRouter()
result_document_preview_router.register(r'^', ResultDocumentDetailView.as_view(),
base_name='Department')
document_app/views.py
class ResultDocumentDetailView(generics.ListAPIView):
queryset = Department.objects.all()
lookup_field = 'department_pk'
lookup_url_kwarg = 'department_pk'
def list(self, request, department_pk):
queryset = self.get_queryset()
import ipdb; ipdb.set_trace() # this break point is never hit
department = get_object_or_404(queryset, department_pk=department_pk)
...generate document logic...
return Response(status=status.HTTP_200_OK)
Мне кажется, что вы должны использовать 'RetrieveAPIView'. 'ListAPIView' предназначен для возврата коллекции. 'Retrieve ...' предназначен для получения одного экземпляра. Говоря это, я не понимаю, почему «список» вообще не будет вызван. – Louis
@ louis да, не имеет смысла и для меня. Первоначально я использовал «RetrieveAPIView», но переключился на «ListAPIView», потому что не был уверен, нужен ли мне «pk» в конце моего URL-адреса для «RetrieveAPIView», и, возможно, именно поэтому он не работал. – orange1