在 Django 中删除一个 post

deleting a post in django

嗨,我读过一些类似的 posts 但找不到相同的问题。 我写了一个删除 post 的代码,当我按下删除时它显示 404 错误但是当回到家时 post 仍然存在 观看次数:

def delete_music_view(request,music_id):
    # view for deleting music
    my_object = add_music.objects.get(id=music_id)
    if request.method == 'POST':
        my_object.delete()
        return redirect('pages:home')   
    context = {'my_object':my_object}

    return render(request,'pages/delete_music.html',context)

url:

urlpatterns = [
    path('',views.home,name='home'),
    path('add_music/',views.add_music_view,name='add_music'),
    path('musics/<int:music_id>',views.musics_view,name='music_page'),
    path('musics/<int:music_id>/delete',views.delete_music_view,name='delete_music'),
]

模板:

{% extends 'pages/base.html' %}

{% block content %}
<form action="." method='POST'>
    {% csrf_token %}
    <p><input type="submit" name="delete" value="yes"><a href="../../">cancel</a></p>
</form>
{% endblock %}

你能告诉我有什么问题吗?

由于 delete_music_view 方法将处理 POST 请求,因此无需使用表单属性 action。你有:

<form action="." method='POST'>
    {% csrf_token %}
    <p><input type="submit" name="delete" value="yes"><a href="../../">cancel</a></p>
</form>

从您的表单中删除 action 并改为:

<form method='POST'>  # Removing the action attribute
    {% csrf_token %}
    <p><input type="submit" name="delete" value="yes"><a href="../../">cancel</a></p>
</form>

应该可以。

此外,请注意,如果您没有为 django 设置可识别的 url 来处理,<a href="../../">cancel</a> 将显示另一个 404 error

希望这个回答对您有所帮助。