Ajax отправка данных в django python
Пересоздание страницы для использования django forms (текущий экран не использует никакой реализации django forms при рендеринге шаблона), чтобы принимать данные из автозаполнения google places. По сути, просто берем ответ от google, конвертируем его в json и делаем ajax вызов с данными формы и данными google.
Проблема, с которой я сталкиваюсь, заключается в том, что когда я сериализую форму, чтобы передать данные в ajax вызов, поле, которое хранит это json значение, приходит в виде json, обернутого в массив. Если посмотреть на текущую страницу, то этого не происходит, и данные, полученные из google's api, приходят в правильном виде.
Яваскрипт, который обрабатывает получение данных из google, одинаковый, и когда он применяется к полю google-details в html, значение обновляется путем выполнения .val(JSON.stringify()) для данных, которые получены из google.
<form id="myForm">
<input type="hidden" id="google-details" name="google-details">
{{ form }}
<button type="submit" id="submit">submit
</form>
<script type="text/javascript">
$(document).ready(function () {
$("#myForm").on("submit", function () {
event.preventDefault();
do_ajax_call();
}
}
function do_ajax_call() {
let foo = $("#myForm").serialize();
$.ajax({
url: '/destination/',
type: 'post',
data: foo,
success: function(res) {
//Do stuff
}
})
}
</script>
данные, которые я получаю из ajax на обновленной странице
['{"address_components":[{"long_name":"20","short_name":"20","types":["street_number"]},{"long_name":"West 34th Street","short_name":"W 34th St.","types":["route"]},{"long_name":"Manhattan","short_name":"Manhattan","types":["sublocality_level_1","sublocality","political"]},{"long_name":"New York","short_name":"New York","types":["locality","political"]},{"long_name":"New York County","short_name":"New York County","types":["administrative_area_level_2","political"]},{"long_name":"New York","short_name":"NY","types":["administrative_area_level_1","political"]},{"long_name":"United States","short_name":"US","types":["country","political"]},{"long_name":"10001","short_name":"10001","types":["postal_code"]}],"business_status":"OPERATIONAL","formatted_address":"20 W 34th St., New York, NY 10001, USA","name":"Empire State Building","place_id":"ChIJaXQRs6lZwokRY6EFpJnhNNE","types":["tourist_attraction","museum","point_of_interest","establishment"],"url":"https://maps.google.com/?cid=15074921902713971043","html_attributions":[]}', '', '', '']
ожидается, данные, которые я получаю из текущей итерации.
{"address_components":[{"long_name":"20","short_name":"20","types":["street_number"]},{"long_name":"West 34th Street","short_name":"W 34th St.","types":["route"]},{"long_name":"Manhattan","short_name":"Manhattan","types":["sublocality_level_1","sublocality","political"]},{"long_name":"New York","short_name":"New York","types":["locality","political"]},{"long_name":"New York County","short_name":"New York County","types":["administrative_area_level_2","political"]},{"long_name":"New York","short_name":"NY","types":["administrative_area_level_1","political"]},{"long_name":"United States","short_name":"US","types":["country","political"]},{"long_name":"10001","short_name":"10001","types":["postal_code"]}],"business_status":"OPERATIONAL","formatted_address":"20 W 34th St., New York, NY 10001, USA","name":"Empire State Building","place_id":"ChIJaXQRs6lZwokRY6EFpJnhNNE","types":["tourist_attraction","museum","point_of_interest","establishment"],"url":"https://maps.google.com/?cid=15074921902713971043","html_attributions":[]}
Если вы хотите пропускать пустые элементы - вы можете фильтровать их на стороне js:
let foo = $("#myForm").serialize().filter(bit => bit);
Если вы хотите отправить только первый непустой элемент в списке:
let foo = $("#myForm").serialize().filter(bit => bit);
foo = foo.length ? foo[0] : {}
Если вы хотите пропускать пустые элементы - вы можете фильтровать их на стороне python:
data = (bit for bit in serialized_data if bit)
Если вы хотите получить только первый непустой элемент в списке:
data = (bit for bit in serialized_data if bit)
data = next(data, None)
Но я чувствую, что что-то не так в логике, о которой идет речь. Я не могу определить это.
В этом случае файл
может быть пустым.