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 < massimilianomor...@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.der...@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 < >> massimilianomor...@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@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@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