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

Massimiliano Moraca massimilianomoraca a gmail.com
Ven 26 Lug 2019 10:30:31 CEST


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-integrityerror
>> _______________________________________________
>> 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
>


Maggiori informazioni sulla lista Gfoss