]> git.atlas4tour.it Git - pia_atlas.git/commitdiff
modifica datatables multimedia
authorValeria Vitti <valeria.vitti@dyrecta.com>
Thu, 21 Dec 2023 11:17:40 +0000 (12:17 +0100)
committerValeria Vitti <valeria.vitti@dyrecta.com>
Thu, 21 Dec 2023 11:17:40 +0000 (12:17 +0100)
bug fix inserimento media
bug fiz api

api/views.py
sistema/datatables.py
sistema/forms.py
sistema/models.py
sistema/templates/add_mod_poi.html
sistema/views.py

index ac115712295a5531d7b112ed61114a669974ed47..4fdf28c6cf7e43a3dcf8c0dd4715a8f86dbf74b2 100644 (file)
@@ -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:
 
index 016b1becdb9c541e6dc20f41dac7f963e40a772c..5f12e7d3cbe86617551ba6d0dbde88c8d7fe456a 100644 (file)
@@ -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'<a href=" {MEDIA_URL} {row.media} " target="_blank">vedi</a>'
+            return f'<a href="{MEDIA_URL}{row.media}" target="_blank">vedi</a>'
         if column == 'del':
             return '<button class="btn btn-sm btn-danger" onclick="DeleteMultimedia(%s)"><i class="fas fa-trash"></i></button>' % row.pk
         else:
index 2c0b5c280fed85fdb517c57eb70844cd0bebbb57..1ad24ef950815fe85db5e6c9000691c834538040 100644 (file)
@@ -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):
index 64138cd862791bb27e1cf79a1fd450c0188411e0..139887c61a0b2c76bee8bc5aa75a43293a215920 100644 (file)
@@ -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
index 1d06cffcb2c4b2b354f3da99abf189fc5b968760..a0f0f0ac7a325aed913b7f5bd36402eb0dff7b6b 100644 (file)
@@ -32,7 +32,7 @@
                                 <h4 class="clr-config">Aggiungi una nuovo punto di interesse nel sistema</h4>
                             {% endif %}
                         </div>
-                        <form method="POST" id="poi_form" action="{% url 'sistema:poi' %}">{% csrf_token %}
+                        <form method="POST" id="poi_form" action="{% url 'sistema:poi' %}" enctype="multipart/form-data">{% csrf_token %}
                             <div class="card-body">
                                 {% if form.instance.pk %}
                                     <input type="hidden" name="mod" form="poi_form">
@@ -84,7 +84,7 @@
                     <div class="card-header">
                         <h4 class="clr-config">Inserisci file multimediali per il punto di interesse</h4>
                     </div>
-                    <form method="POST" id="multimedia_form" action="{% url 'sistema:poi' %}">{% csrf_token %}
+                    <form method="POST" id="multimedia_form" action="{% url 'sistema:poi' %}" enctype="multipart/form-data">{% csrf_token %}
                         <div class="card-body">
                             {% if form.instance.pk %}
                                 <input type="hidden" name="add-multimedia" form="multimedia_form">
index 5bdc2ff6eefbe0b66e8a5c7d17be3adf078e33be..bbdd560cffffe7b619231b2c280e66bdc21a5fed 100644 (file)
@@ -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: