Django не может удалять объекты, а также не может перенаправлять

#python #django

#python #django

Вопрос:

Я изучаю django и сталкиваюсь с некоторыми проблемами. Я уже искал этот вопрос, но моя ситуация не похожа на другие.

В моем представлении удаления у меня есть:

 def student_delete_view(request, my_id):
    #try:
    #    obj = student.objects.get(id=my_id)
    #except student.DoesNotExist:
    #    raise Http404

    obj = get_object_or_404(student, id=my_id)

    if request.method == 'POST':
        obj.delete()
        print("delete trigered")
        return redirect('home.html')
    context = {
        'object':obj
    }

    return render(request, "student/student_delete.html", context)
 

И здесь my_id устанавливается в urls.py как:

 path('student/<int:my_id>/delete', student_delete_view, name='rmc')
 

У меня есть это в моем статическом HTML:

 {% extends 'base.html' %}

{% block content %}
<form action='.' method='POST'>{% csrf_token %}
    <h1>Do you want to delete {{object.id}}?</h1>
    <p>{{object.student_name}}</p>
    <input type='submit' value='yes'><a href='.'>Cancel</a>


</form>

{% endblock %}
 

Таким образом, если я введу /student/1/delete , он получит соответствующий объект и спросит меня, хочу ли я его удалить. Я смог успешно перейти на страницу удаления, и она может правильно отображать object.student_name, что означает, что он получает этот объект из SQL.

Затем, если я нажму на delete, он вообще не удаляет этот объект, а также не выполняет функцию перенаправления.

Кроме того, в консоли он не выводит «delete triggered», что означает, что он вообще не запускает удаление.

Единственное, что в консоли:

 Not Found: /student/1/
 

Я понятия не имею, почему он пытается перейти сюда.

Мне просто интересно, почему он не запускает удаление, а перенаправление не работает. Спасибо!

Комментарии:

1. Вы уверены, что доступ к этому URL осуществляется через POST-вызов, а не через GET-вызов?

2. @JohnGordon Вы имеете в виду, что метод в HTML — это «post»? Да, это так.

3. @JohnGordon Я только что изменил метод как в HTML, так и в views.py чтобы ДОБРАТЬСЯ. Теперь, похоже, можно успешно удалить запись, но она не отображает страницу удаления

4. Не меняйте его на GET . Если вы это сделаете, страница будет перенаправляться, как только вы ее загрузите.

Ответ №1:

В:

 path('student/<int:my_id>/delete', student_delete_view, name='rmc')
 

Добавьте / после удаления, чтобы сделать это:

 path('student/<int:my_id>/delete/', student_delete_view, name='rmc')
 

Также измените параметр в redirct на (‘home’), а не на HTML