python - Django:编写一个 View 来删除带有复选框的项目

标签 python html django checkbox django-forms

我需要帮助编写一个 View 来获取 POST 数据,然后找出哪些复选框已被选中,然后从数据库中删除与 id 匹配的项目。 最初,这是一个复选框问题。在编辑订单表单中,有一个项目列表。现在我可以使用一些 javascript 删除该项目,但它没有保存,因为我需要从我的数据库中完全删除它。我尝试使用我的编辑顺序 View 通过 delete() 删除项目,但这不起作用。一定有其他我做错了,但我不知道是什么。

delete_item = request.POST.get('delete_item', None)
    if request.method == 'POST':
        form = forms.OrderForm(request.POST, instance = order)
        if form.is_valid() and save_item is not None:
            form.save(True)
            request.user.message_set.create(message = "The order has been updated successfully.")
            return HttpResponse("<script language=\"javascript\" type=\"text/javascript\">window.opener.location = window.opener.location; window.close();</script>")

        if status is not None and contact is not None and save_status is not None and delete_item is not None:
            try:
                for id in status_items:
                    item = models.StorageItem.objects.get(pk = id)
                    delete = item
                    delete.delete()
                    current_status = models.ItemStatusHistory(item = item, contact = contact, status = status,
                                                    user = request.user)
                    current_status.save()
            except:
                pass
            request.user.message_set.create(message = "Status successfully changed for {0} items".format(len(status_items)))

{% for item in items %}
        <tr class="items_table_row">
                <td><input type="checkbox" name="item" value="{{item.pk}}" checked="checked"{% endif %}>
                <td>{{item.tiptop_id}}</td><td>{{item.alternative_id}}</td><td>{{item.title}}</td><td>{{item.type}}</td><td>{{item.format}}</td>
                <td><span id="{{item.pk}}" name="type">{{item.itemstatushistory_set.latest}}</span></td><td>{{item.itemstatushistory_set.latest.date.date|date:"d M Y"}}</td>
                <td><a href="{% url tiptop.views.edit_item item.client.pk item.pk %}" onclick="return showAddAnotherPopup(this);">Edit</a></td>
        </tr>
{% endfor %}

最佳答案

如果您的模板使用带有 name="item" 的复选框....delete() 应该可以工作。

Items.objects.filter(id__in=request.POST.getlist('items')).delete()

你有异常(exception)吗? delete() 代码是否一直在运行?放入打印语句。

您有“大量代码”、许多我们不熟悉的条件以及一个 try/except block ,所以我只想确保 View 确实进入了删除阶段。

更新:这是一段粗略的代码,不熟悉您的代码。
如果 status 不是 None 并且 contact 不是 None 并且 save_status 不是 None 并且 delete_item 不是 None:

为什么不检查是否存在按下的特定按钮?

# html
<input type="submit" name="save" value="Save Items" />
<input type="submit" name="delete" value="Delete Items" />

# view
if request.POST.get('delete'):
   Items.objects.filter(id__in=request.POST.getlist('items')).delete()
elif request.POST.get('save'):
   form = Form(request.POST)
# ... so on

关于python - Django:编写一个 View 来删除带有复选框的项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4897291/

相关文章:

python - 是否可以覆盖类的 __setattr__ ?

python - 二叉树获取每个级别的所有节点

javascript - 使 div 和输入宽度为父级的 100%

html - HTML 属性编码/转义与常规 HTML 编码有何不同?

javascript - 如何检测表单中的输入按键并滚动到元素?

python - 在 React 应用程序中使用 axios.post 到 Django 端点时出现 403 错误代码

python - 我无法运行服务器 Django 2.0

java - JNIUS 和 TIKA - 尝试 parseToString 时出错

python - “经理”对象不是可迭代的错误

python - 使用Python(Bash?)获取操作系统级别的系统信息(CPU速度)