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

Django中如何通过表单传递post.pub_date到视图实现删除功能?

如何传递Post标识到视图实现删除功能

嘿,要把每个post的pub_date(或者更稳妥的唯一主键)传递到视图来实现删除,你可以按下面的方法修改代码:

方法一:传递pub_date(你需求的方式)

1. 在模板表单中添加隐藏字段

在每个删除按钮对应的表单里,新增一个隐藏input,把当前post的pub_date传递过去,注意要格式化日期确保和数据库存储格式匹配:

{% for post in posts %}
<div>
  <h3>Zuletzt ausgewählt:</h3>
  <p>published: <b>{{ post.pub_date }}</b> </p>
  <p> 
    name: <b>{{ post.Name }}</b> 
    anmeldung: <b>{{ post.get_Anmeldung_display }}</b> 
    essen: <b>{{ post.get_Essen_display }}</b>
    <form action="" method="POST">
      {% csrf_token %}
      <!-- 隐藏字段传递格式化后的pub_date -->
      <input type="hidden" name="pub_date" value="{{ post.pub_date|date:'Y-m-d H:i:s' }}">
      <input class="btn btn-default btn-danger" name="delete" type="submit" value="Löschen"/>
    </form>
  </p>
  <p> Email: <b>{{ post.Email }}</b> </p>
</div>
{% endfor %}

2. 在视图中接收并处理

在views.py里,从POST请求中取出pub_date,转换为datetime对象后过滤删除对应条目:

from django.utils import timezone

if request.method == 'POST' and 'delete' in request.POST:
    # 获取传递的日期字符串并转为datetime格式
    pub_date_str = request.POST.get('pub_date')
    try:
        pub_date = timezone.datetime.strptime(pub_date_str, '%Y-%m-%d %H:%M:%S')
        Eintrag.objects.filter(pub_date=pub_date).delete()
    except ValueError:
        # 处理日期格式错误的异常情况
        pass
    return HttpResponseRedirect(request.path)

更推荐的方法:用主键(pk)传递

因为pub_date可能存在重复(多个post发布时间相同),用每个post的唯一主键pk能确保只删除目标条目,避免误删,安全性更高:

修改模板表单:

<form action="" method="POST">
  {% csrf_token %}
  <input type="hidden" name="post_id" value="{{ post.pk }}">
  <input class="btn btn-default btn-danger" name="delete" type="submit" value="Löschen"/>
</form>

修改视图逻辑:

if request.method == 'POST' and 'delete' in request.POST:
    post_id = request.POST.get('post_id')
    if post_id:
        Eintrag.objects.filter(pk=post_id).delete()
    return HttpResponseRedirect(request.path)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:05:25