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

Massimiliano Moraca massimilianomoraca a gmail.com
Ven 26 Lug 2019 08:31:54 CEST


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


Maggiori informazioni sulla lista Gfoss