2011-02-03 64 views
0

我有一个显示项目列表的模板。它有每个项目的复选框。当勾选复选框时,我希望能够从复选框中删除项目。所以我需要一个按钮来删除一个项目,一旦复选框被选中。这是我的模板。如何在勾选时删除复选框?

{% 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

你想通过客户端代码或服务器端代码删除它吗? – Cuga 2011-02-03 14:22:21

+0

@Cuga不知道有什么区别,但基本上我想通过按钮删除一个项目,当它被检查。我想要一段代码。 – Shehzad009 2011-02-03 14:28:49

+0

'删除项目'是指'立即从网页上的列表中删除它'还是'让用户点击提交按钮,然后django服务器从数据库中删除项目?' – Spacedman 2011-02-03 15:00:10

回答

1

您需要编写一个获取POST数据的视图,找出哪些复选框已被选中,然后从id匹配的数据库中删除项目。

您可能还想将视图包装在装饰器中以确保用户有权删除东西,或者检查登录用户是否与要删除的项目的所有者相同,如果这就是您想要做的事情。

或者你可以使用Django的窗体框架来处理一些繁重的工作。

从数据库中删除对象位于db模型文档中。

这些事情并非完全无关紧要,所以不要在这里等待太久以获得完整的解决方案 - 获得黑客行为!

0

[编辑]: 真正的问题是能够在一个表单提交从数据库中删除的项目,而不是从HTML表中删除行。请参见“一个简单的表单处理示例”此页Tutorial for form submissions in Django. [/编辑]

这里上是可以复制到Web浏览器在您的计算机上的一个.html文件和开放的一个例子。它使用简单的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浏览器中的表中删除复选框,但它不会影响数据库上的任何内容。

0

你做错了:)只为删除创建一个视图。发送元素(或url)的POST或GET id,从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删除功能的第一个电话URL,然后成功更新使用数据模板[“HTML”]。

你可以问这个人:http://twitter.com/sasklacz,因为他在django上写了一些关于ajax的教程,给你需要的确切代码。