Convert folder create view to CBV.

This commit is contained in:
Roberto Rosario
2015-07-08 22:02:00 -04:00
parent 0946aef7c0
commit c751db4447
2 changed files with 26 additions and 21 deletions
+3 -2
View File
@@ -7,13 +7,14 @@ from .api_views import (
APIFolderDocumentView, APIFolderListView, APIFolderView APIFolderDocumentView, APIFolderListView, APIFolderView
) )
from .views import ( from .views import (
DocumentFolderListView, FolderDetailView, FolderEditView, FolderListView DocumentFolderListView, FolderCreateView, FolderDetailView, FolderEditView,
FolderListView
) )
urlpatterns = patterns( urlpatterns = patterns(
'folders.views', 'folders.views',
url(r'^list/$', FolderListView.as_view(), name='folder_list'), url(r'^list/$', FolderListView.as_view(), name='folder_list'),
url(r'^create/$', 'folder_create', name='folder_create'), url(r'^create/$', FolderCreateView.as_view(), name='folder_create'),
url(r'^(?P<pk>\d+)/edit/$', FolderEditView.as_view(), name='folder_edit'), url(r'^(?P<pk>\d+)/edit/$', FolderEditView.as_view(), name='folder_edit'),
url(r'^(?P<folder_id>\d+)/delete/$', 'folder_delete', name='folder_delete'), url(r'^(?P<folder_id>\d+)/delete/$', 'folder_delete', name='folder_delete'),
url(r'^(?P<pk>\d+)/$', FolderDetailView.as_view(), name='folder_view'), url(r'^(?P<pk>\d+)/$', FolderDetailView.as_view(), name='folder_view'),
+23 -19
View File
@@ -4,7 +4,7 @@ import logging
from django.conf import settings from django.conf import settings
from django.contrib import messages from django.contrib import messages
from django.core.exceptions import PermissionDenied from django.core.exceptions import PermissionDenied, ValidationError
from django.core.urlresolvers import reverse, reverse_lazy from django.core.urlresolvers import reverse, reverse_lazy
from django.http import HttpResponseRedirect from django.http import HttpResponseRedirect
from django.shortcuts import get_object_or_404, render_to_response from django.shortcuts import get_object_or_404, render_to_response
@@ -13,7 +13,9 @@ from django.utils.translation import ugettext_lazy as _, ungettext
from acls.models import AccessControlList from acls.models import AccessControlList
from common.utils import encapsulate from common.utils import encapsulate
from common.views import SingleObjectEditView, SingleObjectListView from common.views import (
SingleObjectCreateView, SingleObjectEditView, SingleObjectListView
)
from documents.permissions import permission_document_view from documents.permissions import permission_document_view
from documents.models import Document from documents.models import Document
from documents.views import DocumentListView from documents.views import DocumentListView
@@ -74,25 +76,27 @@ class FolderListView(SingleObjectListView):
} }
def folder_create(request): class FolderCreateView(SingleObjectCreateView):
Permission.check_permissions(request.user, [permission_folder_create]) fields = ('label',)
model = Folder
view_permission = permission_folder_create
if request.method == 'POST': def form_valid(self, form):
form = FolderForm(request.POST) try:
if form.is_valid(): Folder.objects.get(label=form.cleaned_data['label'], user=self.request.user)
folder, created = Folder.objects.get_or_create(user=request.user, label=form.cleaned_data['label']) except Folder.DoesNotExist:
if created: instance = form.save(commit=False)
messages.success(request, _('Folder created successfully')) instance.user = self.request.user
return HttpResponseRedirect(reverse('folders:folder_list')) instance.save()
else: return super(FolderCreateView, self).form_valid(form)
messages.error(request, _('A folder named: %s, already exists.') % form.cleaned_data['label']) else:
else: messages.error(self.request, _('A folder named: %s, already exists.') % form.cleaned_data['label'])
form = FolderForm() return super(FolderCreateView, self).form_invalid(form)
return render_to_response('appearance/generic_form.html', { def get_extra_context(self):
'title': _('Create folder'), return {
'form': form, 'title': _('Create folder'),
}, context_instance=RequestContext(request)) }
def folder_delete(request, folder_id): def folder_delete(request, folder_id):