python - 为什么我的删除按钮没有删除我的数据库对象? Django

标签 python django python-3.x django-models django-views

我拼凑了一个删除按钮并编辑了我的 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 内,原因有两个:

  1. 您只需检查 POST 值(如果它实际上是 post 方法)。

  2. 编辑帖子然后删除它是没有用的。

关于python - 为什么我的删除按钮没有删除我的数据库对象? Django ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58368219/

相关文章:

django - 如何在Heroku上运行Django测试

python - 查找每类具有最高 TF-IDF 分数的前 n 个术语

python - 有效地将平面列表分割为多级嵌套列表

python - 用于数据输入的类似 bash 的 heredoc

python - 在 Django/Python 中编写单元测试

python - 用户参数之间的空格 Python

python - 测试 RPC 扭曲调用的工具?

python - 写入并替换文件中的特定行

python - 更改字符串数据框中的 nan

python - 如何在 OpenCV 中将 16 位图像转换为 8 位图像?