From 05ff9ca3d3ace9a98dd324ec8f2cb35609cc06c9 Mon Sep 17 00:00:00 2001 From: Alexandre Iooss Date: Fri, 15 Oct 2021 14:14:09 +0200 Subject: [PATCH] Upload images in galleries --- photologue_custom/forms.py | 48 ++++++++++++++++++++++++++++++++++---- photologue_custom/views.py | 6 ++--- 2 files changed, 47 insertions(+), 7 deletions(-) diff --git a/photologue_custom/forms.py b/photologue_custom/forms.py index 286f3a0..f7ff388 100644 --- a/photologue_custom/forms.py +++ b/photologue_custom/forms.py @@ -1,6 +1,11 @@ +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 +from photologue.models import Gallery, Photo + +from .models import GalleryExtended, PhotoExtended class UploadForm(forms.Form): @@ -24,6 +29,16 @@ class UploadForm(forms.Form): max_length=250, required=False, ) + date_start = forms.DateField( + label=_('New gallery event start date'), + initial=datetime.date.today, + required=False, + ) + date_end = forms.DateField( + label=_('New gallery event end date'), + initial=datetime.date.today, + required=False, + ) def clean_new_gallery_title(self): title = self.cleaned_data['new_gallery_title'] @@ -41,6 +56,31 @@ class UploadForm(forms.Form): return cleaned_data - def save(self, files): - # TODO: upload - print(type(files)) + def get_or_create_gallery(self): + """ + Get or create gallery + """ + gallery = self.cleaned_data['gallery'] + if not gallery: + # Create new gallery + title = self.cleaned_data.get('new_gallery_title') + gallery = Gallery.objects.create(title=title, slug=slugify(title)) + GalleryExtended.objects.create( + gallery=gallery, + date_start=self.cleaned_data['date_start'], + 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) diff --git a/photologue_custom/views.py b/photologue_custom/views.py index 1bfb18d..4c0ca54 100644 --- a/photologue_custom/views.py +++ b/photologue_custom/views.py @@ -5,13 +5,13 @@ import os import zipfile from io import BytesIO -from django.contrib.auth.mixins import LoginRequiredMixin from django.contrib import messages +from django.contrib.auth.mixins import LoginRequiredMixin from django.core.mail import mail_managers from django.http import HttpResponse +from django.urls import reverse_lazy from django.views.generic.detail import DetailView from django.views.generic.edit import FormView -from django.urls import reverse_lazy from photologue.models import Gallery from photologue.views import GalleryArchiveIndexView, GalleryYearArchiveView from taggit.models import Tag @@ -109,7 +109,7 @@ class GalleryUpload(FormView): # Upload photos # We take files from the request to support multiple upload files = self.request.FILES.getlist('file_field') - form.save(files) + form.save(self.request.user, files) # Notify user then managers messages.success(self.request, "Photos has been successfully uploaded.")