[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