From: Costantino Vitale Date: Fri, 14 Oct 2022 13:23:22 +0000 (+0200) Subject: - Modifica saltaggio poi X-Git-Url: https://git.atlas4tour.it/?a=commitdiff_plain;h=b6ad2e779e2a731fe81dd62bfa7e4112ce6344c4;p=pia_atlas.git - Modifica saltaggio poi - Modifica salvataggio multimedia associati --- diff --git a/media/icon/default.png b/media/icon/default.png new file mode 100644 index 0000000..d826176 Binary files /dev/null and b/media/icon/default.png differ diff --git a/sistema/datatables.py b/sistema/datatables.py index db18796..6a17edb 100644 --- a/sistema/datatables.py +++ b/sistema/datatables.py @@ -3,6 +3,7 @@ from django.utils.html import escape from django.db.models import Q from sistema.models import Localita, Multimedia, TipologiaMultimedia, Percorso, PointOfInterest, Feedback, Gestisce +from socoin_atlas.settings import MEDIA_URL class LocalitaDatatables(BaseDatatableView): @@ -41,11 +42,14 @@ class LocalitaDatatables(BaseDatatableView): class MultimediaDatatables(BaseDatatableView): model = Multimedia - columns = ['id', 'tipologia', 'nome', 'descrizione', 'testo', 'mod', 'del'] - order_columns = ['id', 'tipologia', 'nome', 'descrizione', 'testo', 'mod', 'del'] + columns = ['id', 'tipologia', 'nome', 'descrizione', 'media', 'del'] + order_columns = ['id', 'tipologia', 'nome', 'descrizione', 'media', 'del'] def get_initial_queryset(self): - return self.model.objects.filter(is_active=True) + poi = self.request.GET.get('pk') + if poi: + return self.model.objects.filter(pk=int(poi), is_active=True) + return None def render_column(self, row, column): if column == 'id': @@ -53,15 +57,13 @@ class MultimediaDatatables(BaseDatatableView): if column == 'tipologia': return escape('{0}'.format(row.tipologia.nome)) if column == 'nome': - return escape('{0}'.format(row.provincia)) + return escape('{0}'.format(row.nome)) if column == 'descrizione': return escape('{0}'.format(row.descrizione)) - if column == 'testo': - return escape('{0}'.format(row.testo)) - if column == 'mod': - return '' #% row.pk + if column == 'media': + return f'vedi' if column == 'del': - return '' #% row.pk + return '' % row.pk else: return super(MultimediaDatatables, self).render_column(row, column) @@ -190,7 +192,7 @@ class FeedbackDatatables(BaseDatatableView): def filter_queryset(self, qs): search = self.request.GET.get('search[value]', None) if search: - qs = qs.filter(Q(utente__icontains=search) | Q(valutazione__icontains=search)) + qs = qs.filter(Q(utente__username__icontains=search) | Q(commento__icontains=search)) return qs diff --git a/sistema/forms.py b/sistema/forms.py index f90e132..f00808f 100644 --- a/sistema/forms.py +++ b/sistema/forms.py @@ -1,6 +1,7 @@ from django.contrib.auth.forms import * from sistema.models import Localita, TipologiaMultimedia, Gestisce, PointOfInterest, Percorso, Multimedia +from socoin_atlas.settings import MEDIA_URL class LocalitaForm(forms.ModelForm): @@ -55,9 +56,19 @@ 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 + class PercorsoForm(forms.ModelForm): class Meta: diff --git a/sistema/models.py b/sistema/models.py index e083044..bbc1792 100644 --- a/sistema/models.py +++ b/sistema/models.py @@ -3,7 +3,7 @@ from django.contrib.auth.models import User from django.utils import timezone from rest_framework import serializers -from socoin_atlas.settings import MEDIA_ROOT, STATICFILES_DIRS, STATIC_URL +from socoin_atlas.settings import MEDIA_URL class Localita(models.Model): @@ -29,6 +29,7 @@ class PointOfInterest(models.Model): nome = models.CharField(max_length=255, null=False) lat = models.FloatField() long = models.FloatField() + icona = models.FileField(upload_to='icon/', null=True) is_active = models.BooleanField(default=True) @@ -88,11 +89,6 @@ class Multimedia(models.Model): testo = models.TextField(max_length=255, null=False) is_active = models.BooleanField(default=True) - def save(self, *args, **kwargs): - if not self.media: - self.media = STATIC_URL + 'assets/img/image-64.png' - super().save() - class Feedback(models.Model): utente = models.ForeignKey(User, on_delete=models.DO_NOTHING) diff --git a/sistema/templates/add_mod_poi.html b/sistema/templates/add_mod_poi.html index 2808607..1d06cff 100644 --- a/sistema/templates/add_mod_poi.html +++ b/sistema/templates/add_mod_poi.html @@ -5,35 +5,101 @@
-

Gestione punti di interesse

-
-
- {% if form.instance.pk %} -

Modifica il punto di interesse #{{ form.instance.pk }}

- {% else %} -

Aggiungi una nuovo punto di interesse nel sistema

- {% endif %} +

Gestione + punti di interesse

+ + + +
+
+
+
+ {% if form.instance.pk %} +

Modifica il punto di interesse #{{ form.instance.pk }}

+ {% else %} +

Aggiungi una nuovo punto di interesse nel sistema

+ {% endif %} +
+
{% csrf_token %} +
+ {% if form.instance.pk %} + + + {% endif %} + {{ form | crispy }} +
+
+ +
+
+
-
-
{% csrf_token %} - {% if form.instance.pk %} - - - {% endif %} - {{form | crispy }} -
-
-
-
Multimedia
-
{% csrf_token %} - {{form_multimedia | crispy }} -
+
+
+
+

Lista file multimediali associati al punto di interesse

+
+
+
+
+ + + + + + + + + + + + + + +
+
+
-
@@ -41,60 +107,69 @@ diff --git a/sistema/views.py b/sistema/views.py index f50e355..596b01a 100644 --- a/sistema/views.py +++ b/sistema/views.py @@ -179,16 +179,13 @@ class PoiView(View):#PermissionRequiredMixin return JsonResponse({'response': poi_coords}, status=status.HTTP_200_OK) def add_poi(self, request): - form = PoiForm(data=json.loads(request.POST.get('poi_form'))) + ''' + bisogna controllare il salvataggio dei media nel form multimedia + ''' + form = PoiForm(request.POST) if form.is_valid(): form.save() - multimedia_form = MultimediaForm(data=json.loads(request.POST.get('multimedia_form'))) - if multimedia_form.is_valid(): - multimedia = multimedia_form.save(commit=False) - multimedia.poi = form.instance - multimedia.save() - messages.add_message(request, messages.INFO, 'Nuova punto di interesse inserito con successo.') else: errors = '' @@ -196,15 +193,18 @@ class PoiView(View):#PermissionRequiredMixin errors += '
  • ' + err + '
  • ' 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) + if multimedia_form.is_valid(): + multimedia = multimedia_form.save(commit=False) + multimedia.poi = PointOfInterest.objects.get(pk=int(self.request.POST.get('pk_multimedia'))) + multimedia.save() + def mod_poi(self, request): form = PoiForm(request.POST, instance=PointOfInterest.objects.get(pk=int(self.request.POST.get('pk')))) if form.is_valid(): form.save() - multimedia_form = MultimediaForm(data=json.loads(request.POST.get('multimedia_form')), instance=Multimedia.objects.get(pk=int(self.request.POST.get('pk_multimedia_form')))) - if multimedia_form.is_valid(): - multimedia_form.save() - messages.add_message(request, messages.INFO, 'Punto di interesse aggiornata con successo.') else: errors = '' @@ -217,20 +217,29 @@ class PoiView(View):#PermissionRequiredMixin tipologia.is_active = False tipologia.save() + def del_multimedia(self, request): + multimedia = Multimedia.objects.get(pk=int(request.GET.get('pk'))) + multimedia.is_active = False + multimedia.save() + def get(self, request, *args, **kwargs): if request.GET.get('method') == 'del': self.del_poi(request) - + return JsonResponse({'response': 'Punto di interesse eliminato con successo'}, status=status.HTTP_200_OK) + elif request.GET.get('method') == 'del-multimedia': + self.del_multimedia(request) return JsonResponse({'response': 'Punto di interesse eliminato con successo'}, status=status.HTTP_200_OK) elif 'pk' in kwargs: return render(request, 'add_mod_poi.html', {'form': PoiForm(instance=PointOfInterest.objects.get(pk=int(self.kwargs['pk']))), - 'form_multimedia': MultimediaForm(instance=Multimedia.objects.get(poi_id=int(self.kwargs['pk'])))}) + 'form_multimedia': MultimediaForm()}) else: return render(request, 'add_mod_poi.html', {'form': PoiForm(), 'form_multimedia': MultimediaForm()}) def post(self, request, *args, **kwargs): - if self.request.POST.get('method') == 'mod': + if 'mod' in request.POST: self.mod_poi(request) + elif 'add-multimedia'in request.POST: + self.add_multimedia(request) else: self.add_poi(request)