Improve API view to retreive documents of a type

This commit is contained in:
Roberto Rosario
2014-10-07 14:52:11 -04:00
parent e28f5c9028
commit dd35196492
3 changed files with 28 additions and 5 deletions

View File

@@ -221,3 +221,25 @@ class APIDocumentTypeView(generics.RetrieveUpdateDestroyAPIView):
'PATCH': [PERMISSION_DOCUMENT_TYPE_EDIT],
'DELETE': [PERMISSION_DOCUMENT_TYPE_DELETE]
}
class APIDocumentTypeDocumentListView(generics.ListAPIView):
"""
Returns a list of all the documents of a particular document type.
"""
filter_backends = (MayanObjectPermissionsFilter,)
mayan_object_permissions = {'GET': [PERMISSION_DOCUMENT_VIEW]}
def get_serializer_class(self):
from documents.serializers import DocumentSerializer
return DocumentSerializer
def get_queryset(self):
document_type = get_object_or_404(DocumentType, pk=self.kwargs['pk'])
try:
Permission.objects.check_permissions(self.request.user, [PERMISSION_DOCUMENT_TYPE_VIEW])
except PermissionDenied:
AccessEntry.objects.check_access(PERMISSION_DOCUMENT_TYPE_VIEW, self.request.user, document_type)
return document_type.documents.all()

View File

@@ -34,7 +34,7 @@ class DocumentSerializer(serializers.HyperlinkedModelSerializer):
class DocumentTypeSerializer(serializers.HyperlinkedModelSerializer):
documents = DocumentSerializer(many=True, required=False)
documents = serializers.HyperlinkedIdentityField(view_name='documenttype-document-list')
class Meta:
model = DocumentType

View File

@@ -3,9 +3,9 @@ from __future__ import absolute_import
from django.conf.urls import patterns, url
from .api_views import (APIDocumentView, APIDocumentImageView, APIDocumentListView,
APIDocumentPageView, APIDocumentTypeListView,
APIDocumentTypeView, APIDocumentVersionCreateView,
APIDocumentVersionView)
APIDocumentPageView, APIDocumentTypeDocumentListView,
APIDocumentTypeListView, APIDocumentTypeView,
APIDocumentVersionCreateView, APIDocumentVersionView)
from .settings import PRINT_SIZE, DISPLAY_SIZE
from .views import DocumentListView
@@ -78,6 +78,7 @@ api_urls = patterns('',
url(r'^document_page/(?P<pk>[0-9]+)/$', APIDocumentPageView.as_view(), name='documentpage-detail'),
url(r'^documents/(?P<pk>[0-9]+)/image/$', APIDocumentImageView.as_view(), name='document-image'),
url(r'^documents/(?P<pk>[0-9]+)/new_version/$', APIDocumentVersionCreateView.as_view(), name='document-new-version'),
url(r'^documenttypes/$', APIDocumentTypeListView.as_view(), name='documenttype-list'),
url(r'^documenttypes/(?P<pk>[0-9]+)/documents/$', APIDocumentTypeDocumentListView.as_view(), name='documenttype-document-list'),
url(r'^documenttypes/(?P<pk>[0-9]+)/$', APIDocumentTypeView.as_view(), name='documenttype-detail'),
url(r'^documenttypes/$', APIDocumentTypeListView.as_view(), name='documenttype-list'),
)