Dr_Elvis
@Dr_Elvis
В гугле забанен

Как сделать предзаполняемое поле в модели django?

Есть поле в которое вводится город. Далее есть 2 поля с координатами этого города, широта и долгота.
Необходимо сделать так, чтобы при вводе города отправлялся запрос в гугл и из ответа вставлялись координаты.
Сам запрос в гугл я знаю как можно сделать, например так:
address = "Москва"
api_key = "api key google"
api_response = requests.get('https://maps.googleapis.com/maps/api/geocode/json?address={0}&key={1}'.format(address, api_key))
api_response_dict = api_response.json()

if api_response_dict['status'] == 'OK':
    lat = api_response_dict['results'][0]['geometry']['location']['lat']
    lng = api_response_dict['results'][0]['geometry']['location']['lng']

Как сделать что бы при создании записи после ввода города сразу подставлялись значения в нижние 2 поля широты и долготы?
  • Вопрос задан
  • 239 просмотров
Пригласить эксперта
Ответы на вопрос 3
sim3x
@sim3x
Делаешь вью, которое будет отправлять запрос гуглу
Аяксом его запрашиваешь

Или также аяксом запрошиваешь апи гугла напрямую, а не с сервера
Ответ написан
Комментировать
ulkoart
@ulkoart
как один из ВАРИАНТОВ:
1. В моделе делаешь метод получения координат (def get_gps...return lat, lng)
2. pre_save сигнал ...instance. lat = ...
Ответ написан
Комментировать
Dr_Elvis
@Dr_Elvis Автор вопроса
В гугле забанен
Решил таким образом:
- добавил, через переопределение шаблона админки, кнопку рядом с полем ввода города
- повесил функцию запроса координат:
(function($) { $(document).ready(function() {
	$("#id_to_city").after('<input type="button" value="Запросить координаты" onclick="get_geo(el(\'id_to_city\').value)"/>');
});
})(django.jQuery);

- написал саму функцию:
function get_geo(city) {
	var x = new XMLHttpRequest();
	var api_key = "google_api_key";
	var result = '';
	x.open("GET", "https://maps.googleapis.com/maps/api/geocode/json?address="+city+"&key="+api_key, true);
	x.onload = function (){
		result = JSON.parse(x.responseText);
		el("id_to_lat").value = result.results[0].geometry.location.lat;
		el("id_to_lng").value = result.results[0].geometry.location.lng;
	};
	x.send(null);
}

Теперь пишу город, жму кнопку и через мгновение у меня координаты города на нужном месте.
Всем спасибо! идея об аяксе меня навела на это решение.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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