Ajax POST на url с последующим перенаправлением на него

Я создаю веб-приложение, в котором пользователь может создавать маркеры на карте листовки. Детали маркера сохраняются в бэкенде с помощью Django. Моя цель - перенаправить пользователя на страницу детализации для заполнения подробностей маркера после нажатия на карту. Вот js код для перенаправления на url create с помощью Ajax post. Он запускается, когда пользователь нажимает на карту листовки.

map.on("click", function (e) { 
 window.location.href = {% url 'create' %};
     $.ajax({
          url: {% url 'create' %},
          data: { markers: markers_dict},
          type: "POST"
        }).done(function (response) {
          console.log(response);
        });
}

но у меня возникают трудности в views.py, потому что этот редирект и AJAX пост создают два запроса один GET и другой POST:

def create_marker(request):
    if request.method == "POST":
        r = request.POST.get("markers")
        print(r)
        return JsonResponse({"response":"succeed"})
    else:
        return JsonResponse({"response":"failed"})

и urls.py :

url_patterns = [
    path("create/",views.create_marker,name="create"),
]

Он всегда возвращает неудачный ответ, даже если печатает r в консоли. Как я могу отправить эти данные фронтенда в create url, перенаправить на этот url и создать django с этими данными?

Вы выходите из текущей страницы перед выполнением вызова ajax. Переместите перенаправление в блок done вызова ajax. Что-то вроде этого:

map.on("click", function (e) { 
     $.ajax({
          url: {% url 'create' %},
          data: { markers: markers_dict},
          type: "POST"
        }).done(function (response) {
         window.location.href = “{% url 'create' %}/” + response.id;
        });
}

Вам понадобится еще один url в вашем urls.py для редактирования объекта маркера в бэкенде. Попробуйте использовать CBV DetailView.

Сначала вы публикуете в этом представлении данные вашей карты. После успеха перенаправьте пользователя в представление редактирования созданных данных.

  1. Пользователь нажимает на карту Вы создаете минимальный объект в бэкенде
  2. Вы получаете ID созданного объекта при успехе
  3. Перенаправляете пользователя на форму/представление редактирования этого объекта
  4. Пользователь заполняет оставшиеся элементы
  5. Пользователь нажимает на кнопку сохранения
Вернуться на верх