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 поля широты и долготы?
  • Вопрос задан
  • 234 просмотра
Пригласить эксперта
Ответы на вопрос 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);
}

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

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

Войти через центр авторизации
Похожие вопросы