首页 > 解决方案 > 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 中获取了该对象。

然后,如果我单击删除,它根本不会删除该对象,也不会遵循重定向功能。

同样在控制台中,它不会打印出“删除触发”,这意味着它根本不会触发删除。

控制台中唯一的内容是:

Not Found: /student/1/

我不知道它为什么试图去这里。

我只是想知道为什么它不会触发删除并且重定向不起作用。谢谢!

标签: pythondjango

解决方案


在:

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

在删除后添加 / 使其:

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

还将重定向中的参数更改为 ('home') 而不是 HTML


推荐阅读