Handle database integrity error during upload
This commit is contained in:
parent
2334017abf
commit
baf70d396c
3 changed files with 26 additions and 19 deletions
|
|
@ -299,7 +299,7 @@ msgstr "Date de début de l'évènement de la nouvelle galerie"
|
|||
|
||||
#: photologue_custom/forms.py:38
|
||||
msgid "New gallery event end date"
|
||||
msgstr "Date de fin de l'énèvement de la nouvelle galerie"
|
||||
msgstr "Date de fin de l'évènement de la nouvelle galerie"
|
||||
|
||||
#: photologue_custom/forms.py:46
|
||||
msgid "A gallery with that title already exists."
|
||||
|
|
|
|||
|
|
@ -3,9 +3,9 @@ import datetime
|
|||
from django import forms
|
||||
from django.utils.text import slugify
|
||||
from django.utils.translation import gettext_lazy as _
|
||||
from photologue.models import Gallery, Photo
|
||||
from photologue.models import Gallery
|
||||
|
||||
from .models import GalleryExtended, PhotoExtended
|
||||
from .models import GalleryExtended
|
||||
|
||||
|
||||
class UploadForm(forms.Form):
|
||||
|
|
@ -71,16 +71,3 @@ class UploadForm(forms.Form):
|
|||
date_end=self.cleaned_data['date_end'],
|
||||
)
|
||||
return gallery
|
||||
|
||||
def save(self, user, files):
|
||||
"""
|
||||
Save gallery then photos
|
||||
"""
|
||||
gallery = self.get_or_create_gallery()
|
||||
for photo_file in files:
|
||||
title = f"{gallery.title} - {photo_file.name}"
|
||||
photo = Photo(title=title, slug=slugify(title))
|
||||
photo.image.save(photo_file.name, photo_file)
|
||||
photo.save()
|
||||
photo.galleries.set([gallery])
|
||||
PhotoExtended.objects.create(photo=photo, owner=user)
|
||||
|
|
|
|||
|
|
@ -8,15 +8,18 @@ from io import BytesIO
|
|||
from django.contrib import messages
|
||||
from django.contrib.auth.mixins import LoginRequiredMixin
|
||||
from django.core.mail import mail_managers
|
||||
from django.db import IntegrityError
|
||||
from django.http import HttpResponse
|
||||
from django.urls import reverse_lazy
|
||||
from django.utils.text import slugify
|
||||
from django.views.generic.detail import DetailView
|
||||
from django.views.generic.edit import FormView
|
||||
from photologue.models import Gallery
|
||||
from photologue.models import Gallery, Photo
|
||||
from photologue.views import GalleryArchiveIndexView, GalleryYearArchiveView
|
||||
from taggit.models import Tag
|
||||
|
||||
from .forms import UploadForm
|
||||
from .models import PhotoExtended
|
||||
|
||||
|
||||
class TagDetail(LoginRequiredMixin, DetailView):
|
||||
|
|
@ -109,10 +112,27 @@ class GalleryUpload(FormView):
|
|||
# Upload photos
|
||||
# We take files from the request to support multiple upload
|
||||
files = self.request.FILES.getlist('file_field')
|
||||
form.save(self.request.user, files)
|
||||
gallery = form.get_or_create_gallery()
|
||||
failed_upload = 0
|
||||
for photo_file in files:
|
||||
title = f"{gallery.title} - {photo_file.name}"
|
||||
try:
|
||||
photo = Photo(title=title, slug=slugify(title))
|
||||
photo.image.save(photo_file.name, photo_file)
|
||||
photo.save()
|
||||
photo.galleries.set([gallery])
|
||||
PhotoExtended.objects.create(photo=photo, owner=self.request.user)
|
||||
except IntegrityError:
|
||||
messages.error(self.request, f"{photo_file.name} was not uploaded. Maybe the photo was already uploaded.")
|
||||
failed_upload += 1
|
||||
|
||||
# Notify user then managers
|
||||
messages.success(self.request, "Photos has been successfully uploaded.")
|
||||
if not failed_upload:
|
||||
messages.success(self.request, "All photos has been successfully uploaded.")
|
||||
else:
|
||||
n_success = len(files) - failed_upload
|
||||
messages.warning(self.request, f"Only {n_success} photos were successfully uploaded !")
|
||||
|
||||
gallery_title = form.cleaned_data['gallery'] or form.cleaned_data.get('new_gallery_title', '')
|
||||
photos = ", ".join(f.name for f in files)
|
||||
mail_managers(
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue