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
相关产品推荐
相关产品推荐

