Abstraction for PlaceImageCreation (multiple images)
This commit is contained in:
		@@ -1,18 +1,43 @@
 | 
			
		||||
from django.views import View
 | 
			
		||||
from django.shortcuts import get_object_or_404
 | 
			
		||||
from django.shortcuts import get_object_or_404, redirect
 | 
			
		||||
 | 
			
		||||
from lostplaces.views.base_views import PlaceAssetCreateView
 | 
			
		||||
from lostplaces.views.base_views import PlaceAssetCreateView, PlaceAssetDeleteView
 | 
			
		||||
from lostplaces.models import PlaceImage, Place
 | 
			
		||||
from lostplaces.forms import PlaceImageForm
 | 
			
		||||
 | 
			
		||||
class PlaceImageCreateView(PlaceAssetCreateView):
 | 
			
		||||
class MultiplePlaceImageUploadMixin:
 | 
			
		||||
    
 | 
			
		||||
    def handle_place_images(self, request, place):
 | 
			
		||||
        if request.FILES:
 | 
			
		||||
            submitted_by = request.user.explorer
 | 
			
		||||
            for image in request.FILES.getlist('filename'):
 | 
			
		||||
                place_image = PlaceImage.objects.create(
 | 
			
		||||
                    filename=image,
 | 
			
		||||
                    place=place,
 | 
			
		||||
                    submitted_by=submitted_by
 | 
			
		||||
                )
 | 
			
		||||
                place_image.save()
 | 
			
		||||
            
 | 
			
		||||
class PlaceImageCreateView(MultiplePlaceImageUploadMixin, PlaceAssetCreateView):
 | 
			
		||||
    model = PlaceImage
 | 
			
		||||
    fields = ['filename']
 | 
			
		||||
    form_class = PlaceImageForm
 | 
			
		||||
    template_name = 'place_image/place_image_create.html'
 | 
			
		||||
    success_message = 'Place Images submitted'
 | 
			
		||||
    commit = False
 | 
			
		||||
 | 
			
		||||
    def post(self, request, place_id, *args, **kwargs):
 | 
			
		||||
        place = get_object_or_404(Place, pk=place_id)
 | 
			
		||||
        super().post(request, place_id)
 | 
			
		||||
        self.object.place = place
 | 
			
		||||
        self.object = self.request.user
 | 
			
		||||
        self.object.save()
 | 
			
		||||
        self.place = get_object_or_404(Place, pk=place_id)
 | 
			
		||||
        self.handle_place_images(request, self.place)
 | 
			
		||||
        return redirect(self.get_success_url())
 | 
			
		||||
        
 | 
			
		||||
    def form_valid(self, form):
 | 
			
		||||
        form.instance.place = self.place
 | 
			
		||||
        form.instance.submitted_by = self.request.user.explorer
 | 
			
		||||
        return super().form_valid(form)
 | 
			
		||||
        
 | 
			
		||||
class PlaceImageDeleteView(PlaceAssetDeleteView):
 | 
			
		||||
    model = PlaceImage
 | 
			
		||||
    success_message = 'Images deleted successfully'
 | 
			
		||||
    permission_denied_message = 'You\'r not allowed to delete this image'
 | 
			
		||||
    
 | 
			
		||||
    
 | 
			
		||||
@@ -13,7 +13,8 @@ from django.shortcuts import render, redirect, get_object_or_404
 | 
			
		||||
from django.urls import reverse_lazy
 | 
			
		||||
 | 
			
		||||
from lostplaces.models import Place, PlaceImage
 | 
			
		||||
from lostplaces.views import IsAuthenticatedMixin, IsPlaceSubmitterMixin
 | 
			
		||||
from lostplaces.views.base_views import IsAuthenticatedMixin, IsPlaceSubmitterMixin
 | 
			
		||||
from lostplaces.views.place_image_views import MultiplePlaceImageUploadMixin
 | 
			
		||||
from lostplaces.forms import PlaceForm, PlaceImageForm, TagSubmitForm
 | 
			
		||||
 | 
			
		||||
from taggit.models import Tag
 | 
			
		||||
@@ -64,7 +65,7 @@ class PlaceUpdateView(IsAuthenticatedMixin, IsPlaceSubmitterMixin, SuccessMessag
 | 
			
		||||
    def get_place(self):
 | 
			
		||||
        return self.get_object()
 | 
			
		||||
 | 
			
		||||
class PlaceCreateView(IsAuthenticatedMixin, View):
 | 
			
		||||
class PlaceCreateView(MultiplePlaceImageUploadMixin, IsAuthenticatedMixin, View):
 | 
			
		||||
 | 
			
		||||
    def get(self, request, *args, **kwargs):
 | 
			
		||||
        place_image_form = PlaceImageForm()
 | 
			
		||||
@@ -86,12 +87,7 @@ class PlaceCreateView(IsAuthenticatedMixin, View):
 | 
			
		||||
            place.submitted_by = submitter
 | 
			
		||||
            place.save()
 | 
			
		||||
 | 
			
		||||
            if request.FILES:
 | 
			
		||||
                self._apply_multipart_image_upload(
 | 
			
		||||
                    files=request.FILES.getlist('filename'),
 | 
			
		||||
                    place=place, 
 | 
			
		||||
                    submitter=submitter
 | 
			
		||||
                )
 | 
			
		||||
            self.handle_place_images(request, place)
 | 
			
		||||
            
 | 
			
		||||
            messages.success(
 | 
			
		||||
                self.request,
 | 
			
		||||
@@ -107,15 +103,6 @@ class PlaceCreateView(IsAuthenticatedMixin, View):
 | 
			
		||||
            )
 | 
			
		||||
            return render(request, 'place/place_create.html', context={'form': place_form})
 | 
			
		||||
 | 
			
		||||
    def _apply_multipart_image_upload(self, files, place, submitter):
 | 
			
		||||
        for image in files:
 | 
			
		||||
            place_image = PlaceImage.objects.create(
 | 
			
		||||
                filename=image,
 | 
			
		||||
                place=place,
 | 
			
		||||
                submitted_by=submitter
 | 
			
		||||
            )
 | 
			
		||||
            place_image.save()
 | 
			
		||||
 | 
			
		||||
class PlaceDeleteView(IsAuthenticatedMixin, IsPlaceSubmitterMixin, DeleteView):
 | 
			
		||||
    template_name = 'place/place_delete.html'
 | 
			
		||||
    model = Place
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user