You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Django项目中实现Entry(帖子)删除功能?

如何实现Django话题内帖子(Entry)的删除功能

你可以在现有views.py中添加以下delete_entry视图函数,结合权限检查和页面确认逻辑完成删除功能:

@login_required()
def delete_entry(request, entry_id):
    # 获取要删除的Entry对象
    entry = Entry.objects.get(id=entry_id)
    topic = entry.topic
    # 复用已有权限校验函数,确保只有话题所有者可操作
    check_topic_owner(topic.owner, request)

    if request.method == "POST":
        # 执行删除操作
        entry.delete()
        # 删除后重定向到对应话题详情页
        return redirect('composetopic:topic', topic_id=topic.id)
    
    # GET请求返回删除确认页面,防止误操作
    context = {'entry': entry, 'topic': topic}
    return render(request, 'composetopic/delete_entry.html', context)

关键细节说明

  • 权限校验:直接复用你已有的check_topic_owner函数,保证只有话题所有者能删除帖子,避免越权访问。
  • 请求处理逻辑:
    • POST请求:确认用户的删除意图,调用entry.delete()清除数据库记录,完成后跳转回话题页。
    • GET请求:展示二次确认页面,防止用户误点击删除链接。

配置URL路由

在应用的urls.py中添加对应路由:

from django.urls import path
from . import views

app_name = 'composetopic'
urlpatterns = [
    # 保留已有的其他路由...
    path('entry/<int:entry_id>/delete/', views.delete_entry, name='delete_entry'),
]

创建删除确认模板

在composetopic/templates/composetopic/下新建delete_entry.html,示例内容:

{% extends 'base.html' %}

{% block content %}
  <h3>确认删除帖子</h3>
  <p>确定要删除这条帖子吗:{{ entry.text|truncatechars:50 }}</p>
  
  <form action="{% url 'composetopic:delete_entry' entry.id %}" method="post">
    {% csrf_token %}
    <button type="submit" class="btn btn-danger">确认删除</button>
    <a href="{% url 'composetopic:topic' topic.id %}" class="btn btn-secondary">取消</a>
  </form>
{% endblock content %}

在页面添加删除入口

比如在话题详情页(topic.html)的帖子列表中,给每个帖子加上删除链接:

{% for entry in topic.entry_set.all %}
  <div class="entry-item">
    <p>{{ entry.text }}</p>
    <div class="entry-actions">
      <a href="{% url 'composetopic:edit_entry' entry.id %}">编辑</a>
      <a href="{% url 'composetopic:delete_entry' entry.id %}" class="text-danger">删除</a>
    </div>
  </div>
{% endfor %}

内容的提问来源于stack exchange,提问作者vdkmvx

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 07:17:12