2011-02-08 3 views
0

У меня есть список предметов. У каждого элемента есть флажок. Я хочу иметь возможность удалить элемент с помощью кнопки, которая удаляет все контрольные элементы (те, которые отмечены галочкой). У меня есть jscript, который выполняет половину работы, но удаление элемента из моей базы данных вызывает множество проблем. Когда я нажимаю кнопку удаления, он удаляет элемент. Но когда я снова открываю форму, элемент возвращается снова.Не удается удалить объект: Django

Это мой взгляд.

def edit_order(request, order_no): 
#some code 
items = models.StorageItem.objects.filter(orderservicelist__order__pk = order.pk) 
#some more code including if POST 
    item = models.StorageItem.objects.get(pk = id) 
     if request.POST.get('delete'): 
      item.delete() 

И мой шаблон

{% extends "base_popup.html" %} 


    {% block title %} 
      {{title}} 
    {% endblock %} 

    {% block script %} 

    <script type="text/javascript" src="{{MEDIA_URL}}ui/ui.datepicker.min.js"></script> 
    <script type="text/javascript"> 
      $(function(){ 
        $("#id_required_date").datepicker({dateFormat:"dd/mm/yy"}); 
        $(":checkbox").css("width","auto"); 
      }); 
      $(function(){ 
        $("#check_all").click(function(){ 
          if(this.checked ==true) 
              $("tbody :checkbox").each(function(){ 
                this.checked=true; 
              }); 
            else 
              $("tbody :checkbox").each(function(){ 
                this.checked=false; 
              }); 
        }); 
         }); 
    </script> 
    <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> 


    {% endblock %} 
    {% block content %} 
        <div id="location_header">{{title}}</div> 
    <div id="form_container"> 
    <form action="." method="post"> 
      <fieldset class="model"> 

        <p> 
          <span style="font-weight:bold;font-size:14px">Contact : {{order.contact}}</span> 
        </p> 
        <p> 
          <span style="font-weight:bold;font-size:14px">Cost : {{order.cost}}</span> 
        </p> 
        {{ form.as_p }} 
      </fieldset> 
      <fieldset class="model"> 
        <legend>Items</legend> 
        <table id="items_table"> 

          <thead> 
            <tr> 
              <td><input type="checkbox" id="check_all" checked="checked"></td> 
              <td>Tiptop no</td><td>Client no</td><td>Title</td><td>Item type</td> 
              <td>Format</td> 
            </tr> 
          </thead> 
          <tbody> 
        {% 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 %} 
        </tbody> 
        </table> 
        <p> 
          <form method="post" action="help"> 
          <table width="60%"> 
            <tr> 
              <td> 
                <select name="contact_id"> 
                {% for contact in order.contact.client.contact_set.all %} 
                  <option value="{{contact.pk}}">{{contact}}</option> 
                {% endfor %} 
                </select> 
              </td> 
              <td> 
                <select name="status_id"> 
                {% for status in status_list %} 
                  <option value="{{status.pk}}">{{status}}</option> 
                {% endfor %} 
                </select> 
              </td> 
              <td><input type="submit" name="save_status" value="set status for selected items"></td> 
            </tr> 
          </table> 
        </form> 
        </p> 
      </fieldset> 

      <div id="form_footer"> 
        <span style="font-size:10px;font-weight:bold;margin-right:10px"> 
        </span> 
        <input type="button" value="Add item" onclick="window.location.href='{% url tiptop.views.client_items name.pk %}'" /> 
        <input type="submit" name="save_item" value="Save" onclick="validate_item(this.form)"> 
        <input type="button" name="delete" value="Delete Items" onclick="hideCheckedRows()"> 
      </div> 
    </form> 
    </div> 
    {% endblock %} 
+0

Как вид получить вызывается? –

+0

О, держись, позвольте мне изменить свой шаблон. Обновлено. Список элементов. Что отображает их детали. – Shehzad009

+0

Я все еще не вижу ничего, что вызывало бы представление. –

ответ

2

Ваша проблема заключается в том, что request.POST никогда не содержит ключ delete.

Эти type="button" элементы должны быть type="submit", чтобы отправить форму.

Вы просто скрываются элементы с hideCheckedRows()

+0

@yuji Когда вы имеете в виду по запросу.POST никогда не содержит ключ удаления, вы говорите, что входное имя = «удалить» должно быть внутри

? – Shehzad009

+0

Нет, я имею в виду '' должен быть ''. 'input type =" button "' не появится в вашем сообщении –

+0

Если я сделаю изменения, которые вы только что сказали, hideCheckedRows() больше не скрывает элемент checked. Удаление также не работает при использовании типа ввода «submit». Не уверен, почему он по крайней мере не удаляет. – Shehzad009

Смежные вопросы