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
|
#: photologue_custom/forms.py:38
|
||||||
msgid "New gallery event end date"
|
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
|
#: photologue_custom/forms.py:46
|
||||||
msgid "A gallery with that title already exists."
|
msgid "A gallery with that title already exists."
|
||||||
|
|
|
||||||
|
|
@ -3,9 +3,9 @@ import datetime
|
||||||
from django import forms
|
from django import forms
|
||||||
from django.utils.text import slugify
|
from django.utils.text import slugify
|
||||||
from django.utils.translation import gettext_lazy as _
|
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):
|
class UploadForm(forms.Form):
|
||||||
|
|
@ -71,16 +71,3 @@ class UploadForm(forms.Form):
|
||||||
date_end=self.cleaned_data['date_end'],
|
date_end=self.cleaned_data['date_end'],
|
||||||
)
|
)
|
||||||
return gallery
|
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 import messages
|
||||||
from django.contrib.auth.mixins import LoginRequiredMixin
|
from django.contrib.auth.mixins import LoginRequiredMixin
|
||||||
from django.core.mail import mail_managers
|
from django.core.mail import mail_managers
|
||||||
|
from django.db import IntegrityError
|
||||||
from django.http import HttpResponse
|
from django.http import HttpResponse
|
||||||
from django.urls import reverse_lazy
|
from django.urls import reverse_lazy
|
||||||
|
from django.utils.text import slugify
|
||||||
from django.views.generic.detail import DetailView
|
from django.views.generic.detail import DetailView
|
||||||
from django.views.generic.edit import FormView
|
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 photologue.views import GalleryArchiveIndexView, GalleryYearArchiveView
|
||||||
from taggit.models import Tag
|
from taggit.models import Tag
|
||||||
|
|
||||||
from .forms import UploadForm
|
from .forms import UploadForm
|
||||||
|
from .models import PhotoExtended
|
||||||
|
|
||||||
|
|
||||||
class TagDetail(LoginRequiredMixin, DetailView):
|
class TagDetail(LoginRequiredMixin, DetailView):
|
||||||
|
|
@ -109,10 +112,27 @@ class GalleryUpload(FormView):
|
||||||
# Upload photos
|
# Upload photos
|
||||||
# We take files from the request to support multiple upload
|
# We take files from the request to support multiple upload
|
||||||
files = self.request.FILES.getlist('file_field')
|
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
|
# 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', '')
|
gallery_title = form.cleaned_data['gallery'] or form.cleaned_data.get('new_gallery_title', '')
|
||||||
photos = ", ".join(f.name for f in files)
|
photos = ", ".join(f.name for f in files)
|
||||||
mail_managers(
|
mail_managers(
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue