我拼凑了一个删除按钮并编辑了我的 View ,但它不起作用。有人可以帮我解决这个问题吗?
我移动了一些代码并尝试了一些东西,但我无法让它工作。我需要有人告诉我我做错了什么。
我的看法:
def post_edit(request, pk):
post = get_object_or_404(Listing, pk=pk)
if request.method == "POST":
form = ListingForm(request.POST, instance=post)
if form.is_valid():
post = form.save(commit=False)
post.save()
return redirect('post_view', pk=post.pk)
else:
form = ListingForm(instance=post)
if request.POST.get('delete'):
post.delete()
return redirect('listings')
return render(request, 'post_edit.html', {'form': form})
我的html:
{% extends 'base.html' %}
{% block title %}Post Edit{% endblock %}
{% block content %}
Hi {{ user.username }}!
<p><a href="{% url 'logout' %}">logout</a></p>
<h1>Edit listing:</h1>
<p>The listing will only be viewable to users if "Is Live" is checked.</p>
<form method="POST" enctype="multipart/form-data" class="post-form">{% csrf_token %}
{{ form.as_p }}
<button type="submit" class="save btn btn-default">Save</button>
<p>Click the button below to delete this listing. No second warning is given, once you click delete it will be
removed.</p>
<button type="delete" class="delete btn btn-default">delete</button>
</form>
{% endblock %}
最佳答案
“delete”
不是 HTML 表单控件的有效类型。您需要将其更改为“提交”
(因为您仍想提交表单)。
您需要做的是创建两个具有相同名称和不同值的按钮,如下所示:
<button type="submit" name="submit" value="submit" class="save btn btn-default">Save</button>
<p>Click the button below to delete this listing. No second warning is given, once you click delete it will be
removed.</p>
<button type="submit" name="submit" value="delete" class="delete btn btn-default">delete</button>
然后您可以在 View 中检查是否单击了删除按钮,如下所示:
def post_edit(request, pk):
post = get_object_or_404(Listing, pk=pk)
if request.method == "POST":
if request.POST.get('submit') == 'delete':
post.delete()
return redirect('listings')
form = ListingForm(request.POST, instance=post)
if form.is_valid():
post = form.save(commit=False)
post.save()
return redirect('post_view', pk=post.pk)
else:
form = ListingForm(instance=post)
return render(request, 'post_edit.html', {'form': form})
请注意,我将删除按钮的检查移至 if request.method == "POST":
block 内,原因有两个:
您只需检查 POST 值(如果它实际上是 post 方法)。
编辑帖子然后删除它是没有用的。
关于python - 为什么我的删除按钮没有删除我的数据库对象? Django ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58368219/