From: Valeria Vitti Date: Thu, 21 Dec 2023 11:17:40 +0000 (+0100) Subject: modifica datatables multimedia X-Git-Url: https://git.atlas4tour.it/?a=commitdiff_plain;h=cbedc697cccf4fd97bb228fce6a68d44058c7e56;p=pia_atlas.git modifica datatables multimedia bug fix inserimento media bug fiz api --- diff --git a/api/views.py b/api/views.py index ac11571..4fdf28c 100644 --- a/api/views.py +++ b/api/views.py @@ -146,7 +146,7 @@ class DetailPercorsoAPI(APIView): error = False data = [] - id_percorso = request.data['id_percorso'] + id_percorso = request.query_params['id_percorso'] if id_percorso: @@ -181,7 +181,7 @@ class DetailPoiAPI(APIView): error = False data = [] - id_poi = request.data['id_poi'] + id_poi = request.query_params['id_poi'] if id_poi: diff --git a/sistema/datatables.py b/sistema/datatables.py index 016b1be..5f12e7d 100644 --- a/sistema/datatables.py +++ b/sistema/datatables.py @@ -48,7 +48,7 @@ class MultimediaDatatables(BaseDatatableView): def get_initial_queryset(self): poi = self.request.GET.get('pk') if poi: - return self.model.objects.filter(pk=int(poi), is_active=True) + return self.model.objects.filter(poi=int(poi), is_active=True) return None def render_column(self, row, column): @@ -61,7 +61,7 @@ class MultimediaDatatables(BaseDatatableView): if column == 'descrizione': return escape('{0}'.format(row.descrizione)) if column == 'media': - return f'vedi' + return f'vedi' if column == 'del': return '' % row.pk else: diff --git a/sistema/forms.py b/sistema/forms.py index 2c0b5c2..1ad24ef 100644 --- a/sistema/forms.py +++ b/sistema/forms.py @@ -1,4 +1,5 @@ - +from crispy_forms.helper import FormHelper +from crispy_forms.layout import Layout, Field, Submit from django.contrib.auth.forms import * from sistema.models import Localita, TipologiaMultimedia, Gestisce, PointOfInterest, Percorso, Multimedia from socoin_atlas.settings import MEDIA_URL @@ -56,6 +57,9 @@ class PoiForm(forms.ModelForm): required=False, widget=forms.CheckboxInput(attrs={'class': 'form-control'}) ) + icona = forms.FileField(label='Icona', widget=forms.FileInput( + attrs={'class': 'form-control', 'form': 'poi_form'}), ) + is_danger = forms.BooleanField(widget=forms.CheckboxInput(attrs={'class': 'form-check-input'}), label='Punto di pericolo') class Meta: model = PointOfInterest @@ -64,17 +68,20 @@ class PoiForm(forms.ModelForm): def __init__(self, *args, **kwargs): super(PoiForm, self).__init__(*args, **kwargs) self.fields['icona'].required = False - for f in self.fields: - self.fields[f].widget.attrs.update({'class': 'form-control'}) - def save(self, commit=True): - poi = super().save(commit=False) - if commit: - if not self.cleaned_data['media']: - poi.media = MEDIA_URL + 'icon/default.png' - - poi.save() - return poi + for f in self.fields: + if self.fields[f].widget.input_type != 'checkbox': + self.fields[f].widget.attrs.update({'class': ' form-control'}) + + + # def save(self, commit=True): + # poi = super().save(commit=False) + # if commit: + # if not self.cleaned_data['icona']: + # poi.media = MEDIA_URL + 'icon/default.png' + # + # poi.save() + # return poi class PercorsoForm(forms.ModelForm): diff --git a/sistema/models.py b/sistema/models.py index 64138cd..139887c 100644 --- a/sistema/models.py +++ b/sistema/models.py @@ -2,6 +2,8 @@ from django.db import models from django.contrib.auth.models import User from django.utils import timezone from rest_framework import serializers +from rest_framework.serializers import SlugRelatedField + from socoin_atlas.settings import MEDIA_URL @@ -119,6 +121,10 @@ class PoiSerializer(serializers.ModelSerializer): class MultimediaSerializer(serializers.ModelSerializer): + tipologia = SlugRelatedField( + read_only=True, + slug_field='nome' + ) class Meta: model = Multimedia fields = ('id', 'nome', 'tipologia', 'media', 'nome', 'descrizione', 'testo') \ No newline at end of file diff --git a/sistema/templates/add_mod_poi.html b/sistema/templates/add_mod_poi.html index 1d06cff..a0f0f0a 100644 --- a/sistema/templates/add_mod_poi.html +++ b/sistema/templates/add_mod_poi.html @@ -32,7 +32,7 @@

Aggiungi una nuovo punto di interesse nel sistema

{% endif %} -
{% csrf_token %} + {% csrf_token %}
{% if form.instance.pk %} @@ -84,7 +84,7 @@

Inserisci file multimediali per il punto di interesse

- {% csrf_token %} + {% csrf_token %}
{% if form.instance.pk %} diff --git a/sistema/views.py b/sistema/views.py index 5bdc2ff..bbdd560 100644 --- a/sistema/views.py +++ b/sistema/views.py @@ -13,6 +13,7 @@ from sistema.forms import LocalitaForm, TipoMultimediaForm, PoiForm, PercorsoFor from sistema.models import Localita, TipologiaMultimedia, PointOfInterest, Percorso, Tappa, TappaSerializer, Multimedia, \ Feedback, FeedbackSerializer from socoin_atlas import settings +from socoin_atlas.settings import MEDIA_ROOT from utenti.mixins import CustomLoginRequiredMixin @@ -188,9 +189,18 @@ class PoiView(View):#PermissionRequiredMixin ''' bisogna controllare il salvataggio dei media nel form multimedia ''' - form = PoiForm(request.POST) + form = PoiForm(request.POST, request.FILES) + files = request.FILES.getlist('icona') + is_danger = request.POST.get('is_danger') == 'on' if form.is_valid(): - form.save() + form_save = form.save(commit=False) + form_save.is_danger = is_danger + if files: + for f in files: + form_save.icona = f + else: + form_save.icona = os.path.join(MEDIA_ROOT, 'icon/default.png') + form_save.save() messages.add_message(request, messages.INFO, 'Nuova punto di interesse inserito con successo.') else: @@ -200,16 +210,31 @@ class PoiView(View):#PermissionRequiredMixin messages.add_message(request, messages.ERROR, 'Errore nell\'inserimento del punto di interesse. Controlla il form.') def add_multimedia(self, request): - multimedia_form = MultimediaForm(request.POST) + multimedia_form = MultimediaForm(request.POST, request.FILES) + files = request.FILES.getlist('media') if multimedia_form.is_valid(): multimedia = multimedia_form.save(commit=False) multimedia.poi = PointOfInterest.objects.get(pk=int(self.request.POST.get('pk_multimedia'))) + if files: + for f in files: + multimedia.media = f + else: + multimedia.media = os.path.join(MEDIA_ROOT, 'icon/default.png') multimedia.save() def mod_poi(self, request): form = PoiForm(request.POST, instance=PointOfInterest.objects.get(pk=int(self.request.POST.get('pk')))) + files = request.FILES.getlist('icona') + is_danger = request.POST.get('is_danger') == 'on' if form.is_valid(): - form.save() + form_save = form.save(commit=False) + form_save.is_danger = is_danger + if files: + for f in files: + form_save.icona = f + else: + form_save.icona = os.path.join(MEDIA_ROOT, 'icon/default.png') + form_save.save() messages.add_message(request, messages.INFO, 'Punto di interesse aggiornata con successo.') else: