models.py:
from django.contrib.gis.db import models
class Location(models.Model):
name = models.CharField(max_length=100)
coords = models.PointField(null=True)
forms.py:
from django.contrib.gis import forms
class LocationForm(forms.ModelForm):
class Meta:
model = Location
fields = ['coords', 'name']
В add_location.html автоматом был сгенерирован код для поля модели 'coords':
<div id="div_id_coords" class="form-group">
<div class="controls ">
<div id="id_coords_div_map">
<div id="id_coords_map"></div>
<span class="clear_features">
<a href="javascript:geodjango_coords.clearFeatures()">Delete</a>
</span>
<textarea id="id_coords" class="vSerializedField required" cols="150" rows="10" name="coords"></textarea>
<script type="text/javascript">
var map_options = {};
var options = {
geom_name: 'Point',
id: 'id_coords',
map_id: 'id_coords_map',
map_options: map_options,
map_srid: 4326,
name: 'coords'
};
var geodjango_coords = new MapWidget(options);
</script>
</div>
</div>
</div>
В HEAD я привязывю гугл карту:
<script src="https://maps.googleapis.com/maps/api/js?key=MY-KEY"></script>
{{ form.media }}
В js я определяю карту и маркер:
var map, marker, mapOptions = {...};
map = new google.maps.Map($('#id_coords_map')[0], mapOptions);
map.addListener('click', function(e){
placeMarker(e.latLng, map);
var position = marker.getPosition();
});
function placeMarker(latLng, map) {
marker = new google.maps.Marker({...});
return marker
}
Когда я отправляю форму я вижу ошибку валидации на поле COORDS - "No geometry value provided"
и в оболочке - Error creating geometry from value '' (String or unicode input unrecognized as WKT EWKT, and HEXEWKB.)
То есть в TEXTAREA id='id_coords' передается пустая строка вместо координат.
Я думаю что это происходит потому что OpenLayers остается виджетом, а не GMap (Openlayers идет по умолчанию, т.е. на экране я вижу ГуглКарту, но ОпенЛейерс лежит под ней).
Но я не понимаю что я должен сделать чтобы GMap стал виджетом, чтобы я мог сохранять координаты локации при отправке формы.
Спасибо за помощь!!!