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