Django: 编写视图以删除选中复选框的项目
我需要帮助写一个视图,这个视图可以获取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 %}
1 个回答
5
根据你的模板,使用了带有 name="item"
的复选框…… .delete() 应该可以正常工作。
Items.objects.filter(id__in=request.POST.getlist('items')).delete()
你有没有遇到异常?delete()
这段代码有没有执行?可以加个打印语句来看看。
你有很多代码,还有很多我们不太熟悉的条件,以及一个 try/except 块,所以我想确认一下,视图是否真的能到达删除的那一步。
更新:这段代码对一个不熟悉你代码的人来说有点难懂。
if status is not None and contact is not None and save_status is not None and delete_item is not 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