[Gfoss] Form di immissione dati per GeoDjango restituisce un errore di integrità

Massimiliano Moraca massimilianomoraca a gmail.com
Ven 26 Lug 2019 11:14:17 CEST


Si, lo so, ma l'ho cancellato solo perchè il mio era un errore ridicolo.
Provvedo comunque a riattivare la domanda

Il giorno ven 26 lug 2019 alle ore 11:10 <umbertofilippo a tiscali.it> ha
scritto:

> Solo un consiglio:
> nel sito gis.stackexchange solitamente è buona prassi non cancellare una
> domanda quando si è trovata la soluzione, ma lasciarla o eventualmente
> inserire la risposta a se stessi e accettarla.
> In questo modo in futuro, tu o altri con lo stesso dubbio potranno avere
> chance di trovare la soluzione.
>
> -----Messaggio originale-----
> Da: Gfoss <gfoss-bounces a lists.gfoss.it> Per conto di Massimiliano Moraca
> Inviato: venerdì 26 luglio 2019 10:56
> A: pierluigi de rosa <pierluigi.derosa a gmail.com>
> Cc: GFOSS.it <gfoss a lists.gfoss.it>
> Oggetto: Re: [Gfoss] Form di immissione dati per GeoDjango restituisce un
> errore di integrità
>
> Ho trovato l'errore!
> Me lo hai fatto notare tu indirettamente.
> Ho chiamanto point il field del form che nel modello ho chiamato geom. In
> realtà anche nel modello si chiamava point fino a qualche giorno fa ma per
> avere in PostGIS un nome di campo più familiare per me(geom) l'ho
> rinominato geom e nel frattempo ho fatto altre modifiche al codice.
> Sistemato questo errore posso aggiungere i punti usando il form che ho
> sviluppato. Ho scritto un form così perchè piano piano voglio
> personalizzarlo ed anche perchè per me è più leggibile. Ho iniziato un anno
> fa a studiare Python e Django partendo da conoscenze quasi zero di
> programmazione e per questo alcune cose banali ancora mi sfuggono, come nel
> caso dell'errore nel form.
>
> Grazie :)
>
> Il giorno ven 26 lug 2019 alle ore 10:45 pierluigi de rosa <
> pierluigi.derosa a gmail.com> ha scritto:
>
> > Il form dovrebbe bastare che tu lo faccia del tipo class
> > AddPointForm(forms.ModelForm):
> > class Meta:
> > model = AddPoint
> > fields = ('name', 'geom')
> > widgets = {'geom': OSMWidget(
> >                 attrs={
> >                     'map_width': 800,
> >                     'map_height': 250,
> >                     'default_lat': 0,
> >                     'default_lon': 0,
> >                     'default_zoom': 2,
> >                     }
> >                 )} Pierluigi
> >
> > Il giorno ven 26 lug 2019 alle ore 10:30 Massimiliano Moraca <
> > massimilianomoraca a gmail.com> ha scritto:
> >
> >> Ciao Pierluigi, grazie per l'indicazione. Ho fatto le correzioni che
> >> mi hai indicato(non mi era chiaro che geodjango eredita comunque
> >> modelli e form da django) ma continuo ad avere lo stesso errore:
> >>
> >>> IntegrityError at /map/create/add-points/ null value in column
> >>> "geom" violates not-null constraint
> >>> DETAIL: Failing row contains (4, Punto aggiunto dal form, null).
> >>
> >>
> >> Il giorno ven 26 lug 2019 alle ore 10:09 pierluigi de rosa <
> >> pierluigi.derosa a gmail.com> ha scritto:
> >>
> >>> Ho letto velocemente il tuo codice ma riscontro un errore, Io uso
> >>> poco django 2.2 e più spesso 1.11 per questioni personali però nei
> >>> modelli devi importare solo quello da django.contrib.gis e non anche
> >>> django.contrib ovvero il models dovrebbe essere:
> >>>
> >>>  from django.contrib.gis.db import models
> >>>
> >>>
> >>>  class AddPoint(models.Model):
> >>>          name = models.CharField(max_length=100)
> >>>          geom = geomodels.PointField()
> >>>
> >>>          def __str__(self):
> >>>              return self.name
> >>>
> >>> stessa cosa per i form ovvero devi importare:
> >>> from django.contrib.gis import forms e poi devi usare solo forms
> >>>
> >>> il resto del codice non l'ho visto ma questo errore penso sia
> >>> rilevante
> >>>
> >>> Pierluigi De Rosa
> >>>
> >>> Il giorno ven 26 lug 2019 alle ore 08:32 Massimiliano Moraca <
> >>> massimilianomoraca a gmail.com> ha scritto:
> >>>
> >>>> Buongiorno a tutti,
> >>>> spero che tra voi ci sia chi può darmi una mano GeoDjango visto che
> >>>> sono oramai diversi giorni che sono arenato sul problema che descrivo
> qui[1].
> >>>>
> >>>> In pratica sto provando a sviluppare una piccola applicazione che
> >>>> consente di posizionare un punto su una mappa dandogli un nome. Da
> >>>> pannello di amministrazione di Django riesco a farlo senza
> >>>> problemi, visualizzando il punto sulla mappa. ma l'ostacolo ce l'ho
> >>>> con il form che ho sviluppato e che andrà a sostituire l'immissione
> >>>> da pannello di amministrazione di default.
> >>>>
> >>>> Ogni qualvolta uso il form infatti, una volta posizionato il punto
> >>>> sulla mappa, se do l'ok alla pubblicazione ho un errore di
> >>>> integrità. In pratica dei due dati che passo al form (nome del
> >>>> punto e coordinate) le coordinate sono NULL; questo dato non viene
> >>>> passato e quindi viene fuori l'errore perchè nella tabelle PostGIS
> >>>> associata non è previsto il valore NULL per le
> >>>> geometrie(giustamente).
> >>>>
> >>>> *models.py*
> >>>>
> >>>> >     from django.contrib.gis.db import models as geomodels
> >>>> >     from django.db import models
> >>>> >
> >>>> >     class AddPoint(models.Model):
> >>>> >         name = models.CharField(max_length=100)
> >>>> >         geom = geomodels.PointField()
> >>>> >
> >>>> >         def __str__(self):
> >>>> >             return self.name
> >>>>
> >>>>
> >>>> *forms.py*
> >>>>
> >>>> >     from django import forms
> >>>> >     from django.contrib.gis import forms
> >>>> >
> >>>> >     from .models import AddPoint
> >>>> >
> >>>> >     class AddPointForm(forms.ModelForm):
> >>>> >         name = forms.CharField(
> >>>> >             max_length=100,
> >>>> >             widget=forms.TextInput(
> >>>> >                 attrs={
> >>>> >                     "type": "text",
> >>>> >                     "class": "form-control form-control-lg",
> >>>> >                     }
> >>>> >                 ),
> >>>> >             )
> >>>> >         point = forms.PointField(
> >>>> >             widget=forms.OSMWidget(
> >>>> >                 attrs={
> >>>> >                     'map_width': 800,
> >>>> >                     'map_height': 250,
> >>>> >                     'default_lat': 0,
> >>>> >                     'default_lon': 0,
> >>>> >                     'default_zoom': 2,
> >>>> >                     }
> >>>> >                 ),
> >>>> >             )
> >>>> >
> >>>> >         class Meta:
> >>>> >             model = AddPoint
> >>>> >             fields = [
> >>>> >                 'name',
> >>>> >                 'point',
> >>>> >                 ]
> >>>>
> >>>>
> >>>> *views.py*
> >>>>
> >>>> >     def addPointOnMap(request):
> >>>> >         if request.method == "POST":
> >>>> >             geoform = AddPointForm(request.POST or None)
> >>>> >             if geoform.is_valid():
> >>>> >                 new_point = geoform.save()
> >>>> >                 return redirect('add_points_map')
> >>>> >         else:
> >>>> >             geoform = AddPointForm()
> >>>> >         context = {
> >>>> >             'geoform': geoform,
> >>>> >             }
> >>>> >         template = 'maps/editing/add_point.html'
> >>>> >         return render(request, template, context)
> >>>>
> >>>>
> >>>> Questo è il codice che ho prodotto. Come vedete è una banalissima
> >>>> applicazione ma a quanto pare non riesco a farla funzionare.
> >>>> Uso Django 2.2, il DB che uso è PostgreSQL 11 con PostGIS 2.5
> >>>>
> >>>> ----------
> >>>> [1]
> >>>>
> >>>> https://gis.stackexchange.com/questions/329992/form-returns-integri
> >>>> tyerror _______________________________________________
> >>>> Gfoss a lists.gfoss.it
> >>>> http://lists.gfoss.it/cgi-bin/mailman/listinfo/gfoss
> >>>> Questa e' una lista di discussione pubblica aperta a tutti.
> >>>> I messaggi di questa lista non hanno relazione diretta con le
> >>>> posizioni dell'Associazione GFOSS.it.
> >>>> 796 iscritti al 28/12/2017
> >>>
> >>>
> >>>
> >>> --
> >>> Ing. Pierluigi De Rosa (PhD in Earth Science) Contract Professor of
> >>> Geographic Information System at University of Perugia
> >>> cel: 3497558268 / fax: 075 7823038
> >>> skype: pierluigi.derosa
> >>>
> >>
> >
> > --
> > Ing. Pierluigi De Rosa (PhD in Earth Science)
> > Contract Professor of Geographic Information System at University of
> > Perugia
> > cel: 3497558268 / fax: 075 7823038
> > skype: pierluigi.derosa
> >
> _______________________________________________
> Gfoss a lists.gfoss.it
> http://lists.gfoss.it/cgi-bin/mailman/listinfo/gfoss
> Questa e' una lista di discussione pubblica aperta a tutti.
> I messaggi di questa lista non hanno relazione diretta con le posizioni
> dell'Associazione GFOSS.it.
> 796 iscritti al 28/12/2017
>
>


Maggiori informazioni sulla lista Gfoss