Python Django:编写视图以删除带有复选框的项

Python Django:编写视图以删除带有复选框的项,python,html,django,checkbox,django-forms,Python,Html,Django,Checkbox,Django Forms,我需要帮助编写一个视图,该视图获取POST数据,然后找出已选中的复选框,然后从与id匹配的数据库中删除项目。 最初,这是一个复选框问题。在编辑订单表单中,有一个项目列表。现在,我可以使用一点javascript删除该项,但它无法保存,因为我需要从数据库中完全删除它。我尝试使用“编辑订单”视图删除使用delete()的项目,但不起作用。我肯定还有别的地方做错了,但我不知道是什么 delete_item = request.POST.get('delete_item', None) if r

我需要帮助编写一个视图,该视图获取POST数据,然后找出已选中的复选框,然后从与id匹配的数据库中删除项目。 最初,这是一个复选框问题。在编辑订单表单中,有一个项目列表。现在,我可以使用一点javascript删除该项,但它无法保存,因为我需要从数据库中完全删除它。我尝试使用“编辑订单”视图删除使用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 %}
delete\u item=request.POST.get('delete\u item',无)
如果request.method==“POST”:
form=forms.OrderForm(request.POST,instance=order)
如果form.is_valid()和save_项不是None:
表单保存(True)
request.user.message\u set.create(message=“订单已成功更新。”)
返回HttpResponse(“window.opener.location=window.opener.location;window.close();”)
如果状态为“无”,联系人为“无”,保存\u状态为“无”,删除\u项为“无”:
尝试:
对于状态_项中的id:
item=models.StorageItem.objects.get(pk=id)
删除=项目
delete.delete()
当前状态=型号。项目状态历史记录(项目=项目,联系人=联系人,状态=状态,
user=request.user)
当前_状态。保存()
除:
通过
request.user.message_set.create(message=“为{0}项成功更改了状态”。格式(len(Status_项)))
{items%%中的项的%s}
{{item.tiptop_id}{{item.alternative_id}{{{item.title}{{{item.type}{{{item.format}
{{item.itemstatushistory_set.latest}{{item.itemstatushistory_set.latest.date.date | date:“dmy”}
{%endfor%}

使用带有
name=“item”
的复选框指定模板。delete()应该可以工作

Items.objects.filter(id__in=request.POST.getlist('items')).delete()
你有例外吗?
delete()
代码是否运行过?加入一份打印声明

您有“大量代码”,有很多我们不熟悉的条件,还有一个try/except块,所以我只想确保视图确实进入了删除阶段

更新:这是一段粗略的代码,对于您的代码来说是陌生的。
如果状态不是None,联系人不是None,保存状态不是None,删除项目不是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
#html
#看法
if request.POST.get('delete'):
Items.objects.filter(id\uu in=request.POST.getlist('Items')).delete()
elif request.POST.get('save'):
表单=表单(request.POST)
# ... 等等

每当我在delete()阶段之后抛出print语句时,它甚至都不想打印。我想和你一样。我根本不想进入删除阶段。是的,那是你的问题<代码>如果状态不为“无”,联系人不为“无”,保存状态不为“无”,删除项目不为“无”:很难遵循。我为什么不建议一个更简单的方法呢。。更新此选项更有意义,但仍然不起作用。可能与此行有关Items.objects.filter(id\uu in=request.POST.getlist('Items')).delete()。实际上,条目在我的视图中定义为items=models.StorageItem.objects.filter(orderstoragelist\uuuu order\uuuu pk=order.pk),但即使我将StorageItem替换为条目,它仍然无法删除。是的,如果foo1,foo2,而不是foo3,foo4==foo5,则可以将fat
查找行替换为:“按下了哪个按钮?”:)