为了账号安全,请及时绑定邮箱和手机立即绑定

Django - 如何区分要删除的项目?

Django - 如何区分要删除的项目?

jeck猫 2022-05-19 13:58:19
所以我有几个项目(我称之为笔记)保存在数据库中并显示在这样的页面中:https ://imgur.com/a/O90Qqsb我希望能够编辑和删除特定的笔记,但我很难知道如何告诉我的视图我想删除/编辑哪个我以前必须做类似的事情,但在我总是能够更改我的网址之前,我只会通过那里传递 id,所以现在我留在同一个页面上,我真的不知道该怎么做视图.pydef delete_note(request, pk):note = get_object_or_404(Notes, id=pk)note.delete()return redirect('notes')模板    <div class="container">    <div>        <h1>Notes <button class="btn btn-primary" data-toggle="modal" data-target="#2modal" style="float: right; margin-left: 15px; color: white" type="button" name="button">New note</button> </h1>    </div>     {% for nt in note %}    <div class="card">        <div class="card-body">            <h5 class="card-title">                {{ nt.username }}            </h5>            <p class="card-text">                {{ nt.text }}            </p>            <b>                {{ nt.date }}            </b>            <div style="float: right">                <button class="btn btn-danger" data-toggle="modal" data-target="#myModal" style="float: right; margin-left: 15px; color: white" type="button" name="button"><i class="fa fa-trash"></i></button>            </div>        </div>    </div>         <!-- The Modal --><div class="modal" id="myModal">  <div class="modal-dialog">    <div class="modal-content">      <!-- Modal Header -->      <div class="modal-header">        <h4 class="modal-title">Warning!</h4>        <button type="button" class="close" data-dismiss="modal">&times;</button>      </div>      <!-- Modal body -->      <div class="modal-body">          <p><strong>You are about to delete this note </strong></p>          <p>Are you sure you want to delete it?</p>      </div>
查看完整描述

2 回答

?
慕容708150

TA贡献1831条经验 获得超4个赞

您永远不应该根据 GET 请求删除任何内容。所以不要做一个简单的<a>标签按钮来导致你的笔记被删除。您需要将删除操作放在通过 POST 请求提交的表单中。


将您的模板更改为:


<form method="post" action="{% url 'delete_note' note.pk %}">

    {% csrf_token %}

    <input type="submit" class="btn btn-danger" name="delete">DELETE</input>

</form>

此外,您应该给每个模式一个不同的 id,现在当您单击垃圾桶图标时,目标是“#myModal”,但这始终是第一个,因为 id 必须是唯一的。将 forloop 计数器或 pk 添加到 id。


您的观点是:


def delete_note(request, pk):

    if request.method == 'POST' and request.POST.get('delete'):

        note = get_object_or_404(Notes, pk=pk)

        note.delete()

        return redirect('notes')

    else:

        return HttpResponseNotAllowed(['DELETE'])

另请注意,更好地遵循 REST 指南的更好的 url 将是:


path('notes/<int:pk>/delete', delete_note, name="delete_note")

因为“/notes/”是笔记列表,“/notes/id”是特定笔记,“/notes/id/delete”是对特定笔记的删除操作(在真正的 REST API 中,您不需要/delete 但只会DELETE向“/notes/id”发送 HTTP 请求,但这不能在仅支持的浏览器中完成POST)。


查看完整回答
反对 回复 2022-05-19
?
HUX布斯

TA贡献1876条经验 获得超6个赞

您应该将注释 id 作为表单中的另一个参数传递。您可以在 html 表单中使用隐藏的输入,并使用 note.id 作为值。



查看完整回答
反对 回复 2022-05-19
  • 2 回答
  • 0 关注
  • 106 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信