Ciao a tutti, per un'applicazione web stiamo testando geodjango.
Abbiamo diversi problemini, ma per ora mi concentro su uno solo:
abbiamo una form per l'inserimento dati a cui vengono passati est e
nord di alcuni punti, durante il salvataggio della form creiamo il
campo geometrico da inserire ma alla fine sul database rimane null,
ecco il codice che usiamo nella views (come potete vedere abbiamo
fatto la prova sia con geos che con ogr ma il risultato è uguale)
def insertPlace(request):
if request.method == 'POST':
form = InsertPlaceForm(request.POST)
if form.is_valid():
#pnt = OGRGeometry('POINT (' + str(form.cleaned_data["east"])
+ ' ' + str(form.cleaned_data["north"]) + ')', srs=4326)
pnt = Point(float(form.cleaned_data["east"]),
float(form.cleaned_data["north"]))
pnt.srid = 4326
form.cleaned_data["geom"] = pnt
form.save()
return HttpResponseRedirect('/acesap_webgis/webgis/')
else:
form = InsertPlaceForm() # An unbound form
return render_to_response("insertplace.html", {"formm": form})
ciao
Luca
Il 24 novembre 2010 20:04, Paolo Corti <pcorti@gmail.com> ha scritto:
2010/11/24 Luca Delucchi <lucadeluge@gmail.com>:
Ciao a tutti, per un'applicazione web stiamo testando geodjango.
Abbiamo diversi problemini, ma per ora mi concentro su uno solo:
abbiamo una form per l'inserimento dati a cui vengono passati est e
nord di alcuni punti, durante il salvataggio della form creiamo il
campo geometrico da inserire ma alla fine sul database rimane null,
ecco il codice che usiamo nella views (come potete vedere abbiamo
fatto la prova sia con geos che con ogr ma il risultato è uguale)
conviene che manchi anche il modello e il form (penso che sia li ad
una prima occhiata il malfunzionamento)
appena posso cerco di darti una mano
ecco modello e form
class Sites(models.Model):
id_sites = models.AutoField(primary_key=True)
east = models.DecimalField(max_digits=11, decimal_places=8) # was
65535 for both
north = models.DecimalField(max_digits=11, decimal_places=8)
height = models.DecimalField(max_digits=6, decimal_places=2)
sitename = models.TextField()
geom = gismodels.PointField(srid=4326) # This field type is a
guess. Was models.TextField
notes = models.TextField()
objects = gismodels.GeoManager()
class Meta:
db_table = u'sites'
class InsertPlaceForm(ModelForm):
#id_sites = IntegerField(widget=HiddenInput,required=True)
#geom = gismodels.PointField(required=False) # NOT WORKING.
class Meta:
model = Sites
exclude = ('geom',)
ciao
P
ciao
Luca
Quoting Luca Delucchi <lucadeluge@gmail.com>:
Il 24 novembre 2010 20:04, Paolo Corti <pcorti@gmail.com> ha scritto:
> 2010/11/24 Luca Delucchi <lucadeluge@gmail.com>:
>> Ciao a tutti, per un'applicazione web stiamo testando geodjango.
>> Abbiamo diversi problemini, ma per ora mi concentro su uno solo:
>> abbiamo una form per l'inserimento dati a cui vengono passati est e
>> nord di alcuni punti, durante il salvataggio della form creiamo il
>> campo geometrico da inserire ma alla fine sul database rimane null,
>> ecco il codice che usiamo nella views (come potete vedere abbiamo
>> fatto la prova sia con geos che con ogr ma il risultato è uguale)
>>
>
> conviene che manchi anche il modello e il form (penso che sia li ad
> una prima occhiata il malfunzionamento)
> appena posso cerco di darti una mano
ecco modello e form
class Sites(models.Model):
id_sites = models.AutoField(primary_key=True)
east = models.DecimalField(max_digits=11, decimal_places=8) # was
65535 for both
north = models.DecimalField(max_digits=11, decimal_places=8)
height = models.DecimalField(max_digits=6, decimal_places=2)
sitename = models.TextField()
geom = gismodels.PointField(srid=4326) # This field type is a
guess. Was models.TextField
notes = models.TextField()
objects = gismodels.GeoManager()
class Meta:
db_table = u'sites'
class InsertPlaceForm(ModelForm):
#id_sites = IntegerField(widget=HiddenInput,required=True)
#geom = gismodels.PointField(required=False) # NOT WORKING.
Perché PointField sta sotto gismodels? Dovresti avere all'inizio
from django.contrib.gis.db import models
e tutti i tipi di Field derivano da quello. O no?
Ciao
steko
--
Stefano Costa
http://www.iosa.it/ Open Archaeology
Il 24 novembre 2010 23:39, Stefano Costa <steko@iosa.it> ha scritto:
class InsertPlaceForm(ModelForm):
#id_sites = IntegerField(widget=HiddenInput,required=True)
#geom = gismodels.PointField(required=False) # NOT WORKING.
Perché PointField sta sotto gismodels? Dovresti avere all'inizio
se ti riferisci a questo sopra è commentanto e non funziona...
Ciao
steko
ciao
Luca
Quoting Luca Delucchi <lucadeluge@gmail.com>:
se ti riferisci a questo sopra è commentanto e non funziona...
geom = gismodels.PointField(srid=4326) # This field type is a guess. Was
models.TextField
notes = models.TextField()
objects = gismodels.GeoManager()
Idem come sopra (se non ho visto il commento forse però sono un po' stanco)
Ciao
steko
--
Stefano Costa
http://www.iosa.it/ Open Archaeology
Caro Luca
come spiegato BENE
sulla documentazione di Django [1] (leggi la nota):
"If you specify fields or exclude when creating a form with ModelForm,
then the fields that are not in the resulting form will not be set by
the form's save() method. Django will prevent any attempt to save an
incomplete model, so if the model does not allow the missing fields to
be empty, and does not provide a default value for the missing fields,
any attempt to save() a ModelForm with missing fields will fail. To
avoid this failure, you must instantiate your model with initial
values for the missing, but required fields..."
pertanto puoi usare uno dei due modi suggeriti, ad es modificando
cosi' la tua view, vedrai che ti funziona:
if form.is_valid():
pnt =
Point(float(form.cleaned_data["east"]),float(form.cleaned_data["north"]))
pnt.srid = 4326
place = form.save(commit=False)
place.geom = pnt
place.save()
[1] http://docs.djangoproject.com/en/dev/topics/forms/modelforms/#using-a-subset-of-fields-on-the-form
ciao
P
--
Paolo Corti
GIS specialist and web developer
web: http://www.paolocorti.net
twitter: @paolo_corti
2010/11/26 Paolo Corti <pcorti@gmail.com>:
Caro Luca
come spiegato BENE
sulla documentazione di Django [1] (leggi la nota):
eh grazie, me l'ero perso!!
"If you specify fields or exclude when creating a form with ModelForm,
then the fields that are not in the resulting form will not be set by
the form's save() method. Django will prevent any attempt to save an
incomplete model, so if the model does not allow the missing fields to
be empty, and does not provide a default value for the missing fields,
any attempt to save() a ModelForm with missing fields will fail. To
avoid this failure, you must instantiate your model with initial
values for the missing, but required fields..."
pertanto puoi usare uno dei due modi suggeriti, ad es modificando
cosi' la tua view, vedrai che ti funziona:
si si funziona grazie mille!!
ciao
P
ciao
Luca