我有一个显示项目列表的模板。每个项目都有一个复选框。我希望能够在勾选复选框时从复选框中删除项目。因此,一旦选中复选框,我需要一个删除项目的按钮。这是我的模板。
{% for item in items %}
<tr>
<td><input type="checkbox" name="item" value="{{item.pk}}" checked="checked"></td>
<td>{{item.tiptop_id}}</td><td>{{item.alternative_id}}</td><td>{{item.title}}</td>
<td>{{item.type}}</td><td>{{item.format}}</td>
</tr>
{% endfor %}
我想要知道在我的观点中写些什么。我想。
修改
不确定为什么它仍然没有删除。看看我的意见。我的编辑订单表格。它很安静。我认为删除功能可以解决问题。无论如何看看。
def edit_order(request, order_no):
# Alot of code here
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 = item
delete_item.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)))
答案 0 :(得分:1)
您需要编写一个获取POST数据的视图,找出已选中的复选框,然后从id匹配的数据库中删除项目。
您可能还想在装饰器中包装视图以确保用户有权删除内容,或者检查登录用户是否与要删除的项目的所有者相同,如果这是您想要的做事。
或者您可以使用Django的表单框架来处理一些繁重的工作。
从数据库中删除对象位于db模型文档中。
这些事情并非完全无足轻重,所以不要在这里等待太久以获得完整的解决方案 - 搞黑了!
答案 1 :(得分:0)
<强> [编辑]:强> 真正的问题是能够在表单提交中从数据库中删除项目,而不是从HTML表中删除行。请参阅此页面上的“简单表单处理示例”Tutorial for form submissions in Django. [/编辑]
以下是您可以复制到计算机上的.html文件并在Web浏览器中打开的示例。它使用简单的JavaScript。对于这样的事情,我更喜欢使用jQuery,但根据您的使用情况,它可能比您更喜欢的开销更大。但是,如果您需要进行大量的客户端编程,我强烈建议您使用jQuery。
注意:我认为使用parentNode.parentNode.parentNode有点乱,但这个例子故意使用原始帖子中表达的表/复选框配置。
最好,我将Id分配给与每个复选框相关的表格行,以便更容易访问。
我还添加了一个<input type="button">
,因为它是在原帖中被要求的。您可能需要考虑将onclick=
事件分配给每个复选框,以便用户可以在点击后立即删除这些项目。但这是一种偏好。
<html>
<head>
<script>
function hideCheckedRows() {
var checkboxes = document.getElementsByName("item");
var checkboxes_to_remove = new Array();
var count = 0;
for (var i = 0; i < checkboxes.length; i++) {
if (checkboxes[i].checked == true) {
checkboxes_to_remove[count++] = checkboxes[i];
}
}
for (var i = 0; i < checkboxes_to_remove.length; i++) {
cbx = checkboxes_to_remove[i];
// parentNode.parentNode.parentNode is the <tr>
// parentNode.parentNode is the <td> containing the checkbox
cbx.parentNode.parentNode.parentNode.removeChild(
cbx.parentNode.parentNode);
}
}
</script>
</head>
<body>
<table>
<tr name="table_row">
<td><input type="checkbox" name="item" value="Check1"></td>
<td>Id1</td><td>Alt_Id1</td><td>Title1</td>
<td>Type1</td><td>Format1</td>
</tr>
<tr name="table_row">
<td><input type="checkbox" name="item" value="Check2"></td>
<td>Id2</td><td>Alt_Id2</td><td>Title2</td>
<td>Type2</td><td>Format2</td>
</tr>
<tr name="table_row">
<td><input type="checkbox" name="item" value="Check3"></td>
<td>Id3</td><td>Alt_Id3</td><td>Title3</td>
<td>Type3</td><td>Format3</td>
</tr>
</table>
<input type="button" value="Click to remove checkboxes!"
onclick="hideCheckedRows();"/>
</body>
</html>
修改强>
如果您希望从数据库中删除该项目,我们需要更多信息。我们需要知道使用什么类型的数据库以及处理提交按钮的“POST”的服务器端代码是什么样的。此示例将从用户Web浏览器中的表中删除该复选框,但它对数据库上的任何内容都不起作用。
答案 2 :(得分:0)
你做错了:)创建一个仅用于删除的视图。在POST或GET中发送元素(或在url中),从db中删除元素,然后作为响应发送没有删除元素的列表。
这样的事情:
def delete_element(request, id):
el = get_object_or_404(Element, id=id)
if el:
el.delete()
html = render_list(request)
if request.is_ajax():
result = simplejson.dumps({
"html": "html",
}, cls=LazyEncoder)
return HttpResponse(result, mimetype='application/javascript')
def render_list(request):
elements = Element.objects.all()
return render_to_string(template_name, RequestContext(request, {
"element" : elements, })
然后在您的模板中,您首先使用javascript调用删除功能的网址,然后在成功时使用数据[&#39; html&#39;]更新您的模板。
你可以问这个人:http://twitter.com/sasklacz因为他在django上写了一些关于ajax的教程,为你提供所需的确切代码。