Если ваши координаты в вашей базе данных неверны, вы должны это исправить. В 1_:
from app.models import Point
for obj in Point.objects.all():
obj.lat, obj.lng = obj.lng, obj.lat
obj.save()
Теперь вам нужно только исправить вашу «обратную» проблему. Причина, по которой координаты хранятся неправильно, в первую очередь.
ИЗМЕНИТЬ
Если вы хотите вернуть координату только наоборот, вы можете определить пользовательский метод в модели, чтобы добавить к вашим объектам пользовательские функции «на уровне строк». См.: методы модели.
def _get_reversed_point(self):
"Returns the reversed point (lng, lat)."
return (self.point.lng, self.point.lat)
reversed_point = property(get_reversed_point)
Теперь вы можете нормально запрашивать свою базу данных, а при работе с обратными точками используйте obj.reversed_point
, который вернет обратный кортеж.
ИЗМЕНИТЬ 2
reversed_point
не является частью формы и поэтому не может использоваться в представлении изменений, если вы не добавите его самостоятельно. Это делается с помощью ModelAdmin.form< /а>. В форме вы можете (пере)определить поле и указать виджет. Создайте виджет, переопределив вырезающий виджет. Это выглядит так:
from somewhere import SomeWidget
class MyWidget(SomeWidget):
def render(self, name, value, attrs=None):
output = []
template = '<p>Your html that will display a beautiful map. Point: %(lat)s %(lng)s</p>'
output.append(template % {'lat':self.instance.point.lat, 'lng':self.instance.point.lng, })
output.append(super(SomeWidget, self).render(name, value, attrs))
return mark_safe(u''.join(output))
class MyForm(forms.ModelForm):
point = forms.SomeField(widget=MyWidget)
def __init__(self, *args, **kwargs):
super(MyForm, self).__init__(*args, **kwargs)
if hasattr(self, 'instance'):
# This gives the widget access to all fields in MyModel object.
self.fields['point'].widget.instance = self.instance
class Meta:
model = MyModel
exclude = []
class MyAdmin(admin.ModelAdmin):
form = MyForm
GeoDjango поставляется с некоторыми виджетами. Чтение их кода — хорошая отправная точка, и вы узнаете, где виджеты применяют информацию о точках «неправильным» способом. Удачи.
person
allcaps
schedule
02.09.2013