GeoDjango OSMWidget изменение координат - PullRequest
1 голос
/ 20 марта 2019

Я хочу знать, есть ли способ узнать, когда координаты OSMWidget были изменены, я делаю вид, что отражаю это изменение в полях Долгота и Широта. У меня есть следующая форма:

from django.contrib.gis import forms
from .models import Branch


class BranchCreateForm(forms.Form):
    name = forms.CharField(label ="Name", max_length=120)
    image_facade = forms.ImageField( label="Image Facade")
    longitude = forms.DecimalField(label = "Latitude", max_digits=9, decimal_places=6)
    latitude = forms.DecimalField(label = "Longitude", max_digits=9, decimal_places=6)
    location = forms.PointField(
        widget=forms.OSMWidget(
            attrs={'map_width': 600,
                   'map_height': 400,
                   'template_name': 'gis/openlayers-osm.html',
                   'default_lat': 42.1710962,
                   'default_lon': 18.8062112,
                   'default_zoom': 6}))

1 Ответ

0 голосов
/ 28 марта 2019

A PointField содержит координаты longitude и latitude объекта Point, который он создает . Поэтому вам не нужно сохранять их отдельно как DecimalField s.

Всякий раз, когда через виджет вносятся изменения и форма сохраняется, Point обновляется соответствующим образом.

Предположим, что у вас есть экземпляр Branch, тогда вы можете получить доступ к координатам следующим образом:

br = Branch.objects.get(pk=1)
longitude = br.location.x
latitude = br.location.y

РЕДАКТИРОВАТЬ После объявления Предоставлено OP:

Вам не нужно добавлять поля в классе формы.
Вам нужно получить доступ к конкретным полям формы в шаблоне:

{{ form.location.x|default_if_none:"" }}
{{ form.location.y|default_if_none:"" }}

Источник: Показать значение поля формы Django в шаблоне?

...