|
17 | 17 | from django.urls import reverse |
18 | 18 | from django.core.exceptions import MultipleObjectsReturned |
19 | 19 | from rest_framework import views, viewsets, schemas, response, mixins, decorators, renderers, permissions, status |
| 20 | +from rest_framework_csv.renderers import CSVRenderer |
20 | 21 | from functools import reduce |
21 | 22 | from collections import defaultdict, OrderedDict |
22 | 23 |
|
@@ -59,6 +60,7 @@ def get_template_context(self, data, renderer_context): |
59 | 60 | class CustomModelViewSet(viewsets.ModelViewSet): |
60 | 61 | renderer_classes = [ |
61 | 62 | renderers.JSONRenderer, |
| 63 | + CSVRenderer, |
62 | 64 | CustomTemplateHTMLRenderer, |
63 | 65 | CustomBrowsableAPIRenderer, |
64 | 66 | ] |
@@ -138,14 +140,27 @@ def get_or_create(self, request, **kwargs): |
138 | 140 | headers = self.get_success_headers(serialized_item.data) |
139 | 141 | return response.Response(serialized_item.data, status=status.HTTP_200_OK if found else status.HTTP_201_CREATED, headers=headers) |
140 | 142 |
|
141 | | - @swagger_auto_schema(methods=['get'], auto_schema=None) |
| 143 | + @swagger_auto_schema(methods=['get']) |
142 | 144 | @decorators.action( |
143 | 145 | detail=True, methods=['get'], schema=None, |
144 | | - renderer_classes=[CustomTemplateHTMLRenderer], |
| 146 | + renderer_classes=[ |
| 147 | + renderers.JSONRenderer, |
| 148 | + CSVRenderer, |
| 149 | + CustomTemplateHTMLRenderer |
| 150 | + ], |
145 | 151 | ) |
146 | 152 | def assessments(self, request, pk=None, **kwargs): |
147 | 153 | self.check_permissions(request) |
148 | | - return response.Response() |
| 154 | + if isinstance(request.accepted_renderer, CustomTemplateHTMLRenderer): |
| 155 | + return response.Response() |
| 156 | + # redirect /object/{pk}/assessments => assessments?object={pk} |
| 157 | + GET = request.GET.copy() |
| 158 | + GET[self.get_model_name()] = pk |
| 159 | + return shortcuts.redirect( |
| 160 | + reverse('assessment-list') |
| 161 | + + '?' |
| 162 | + + GET.urlencode() |
| 163 | + ) |
149 | 164 |
|
150 | 165 | @swagger_auto_schema(methods=['get', 'post'], auto_schema=None) |
151 | 166 | @decorators.action( |
@@ -323,6 +338,7 @@ class DigitalObjectViewSet(IdentifiableModelViewSet): |
323 | 338 | detail=True, methods=['get'], |
324 | 339 | renderer_classes=[ |
325 | 340 | renderers.JSONRenderer, |
| 341 | + CSVRenderer, |
326 | 342 | CustomBrowsableAPIRenderer, |
327 | 343 | ], |
328 | 344 | ) |
|
0 commit comments