@denismatveyev7

Google Maps GeoDjango — ошибка No geometry value provided?

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 стал виджетом, чтобы я мог сохранять координаты локации при отправке формы.

Спасибо за помощь!!!
  • Вопрос задан
  • 154 просмотра
Пригласить эксперта
Ответы на вопрос 1
saintbyte
@saintbyte
Django developer
Фигачишь свой виджет но только по хорошему , на сервер надо отправлять строку типа POINT(lon,lat) . А проше возьми и посмотри как там в встроенном виджете - там должно быть hidden поле
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы