2011-02-03 3 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 %} 

Мне нужно было бы знать, что писать в моих представлениях, как я полагаю.

Edit:

Не знаю, почему она до сих пор не удалять. просмотрите мои взгляды. Моя правая форма заказа. Это тихо. Я думал, что функция удаления сделает трюк. В любом случае взгляните.

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

+0

@Cuga Не знаю, в чем разница, но в основном я хочу удалить элемент с помощью кнопки, пока он проверен. И я хочу получить код. – Shehzad009

+0

«Удалить элемент» означает «удалить его из списка на веб-странице немедленно» или «позволить пользователю нажать кнопку отправки, а затем сервер django удалит элемент из базы данных?» – Spacedman

ответ

1

Вам необходимо написать представление, которое получает данные POST, определяет, какие флажки были отмечены, а затем удаляет элементы из базы данных, соответствующей id.

Возможно, вы также захотите обернуть представление в декораторе, чтобы убедиться, что у пользователя есть разрешение на удаление вещей или проверка зарегистрированного пользователя совпадает с владельцем объекта, который будет удален, если это так, как вы хочет предмет.

Или вы можете использовать фреймворк Django для обработки некоторых тяжелых работ.

Удаление объектов из базы данных содержится в документации по модели db.

Эти вещи не являются полностью тривиальными, поэтому не ждите слишком долго здесь для полного решения - получите взломать!

+0

Хорошо, похоже, что это уже сделано. Спасибо – Shehzad009

0

[Изменить]: Реальная проблема заключается в возможности удаления элементов из базы данных в форме представления, не удаляя строки из HTML таблицы. См. «Простой пример обработки формы» на этой странице Tutorial for form submissions in Django. [/ Edit]

Вот пример, который вы можете скопировать в .html-файл на свой компьютер и открыть в веб-браузере. Он использует простой JavaScript. Что-то вроде этого, я предпочитаю использовать jQuery, но в зависимости от вашего использования это может быть больше накладных расходов, чем вы предпочитаете. Однако, если вам нужно выполнить множество клиентских программ, я настоятельно рекомендую использовать jQuery.

Примечание: Я думаю, что это немного грязно, используя parentNode.parentNode.parentNode, но этот пример специально использует конфигурацию таблицы/checkbox, как указано в исходном сообщении.

Желательно, чтобы я назначил идентификаторы строк таблицы, которые коррелируют с каждым флажком, чтобы они были легче получить доступ.

Я также включил <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> 

Edit:

Если вы хотите, чтобы элемент удален из базы данных, нам нужно больше информации. Нам нужно знать, какая база данных используется, и как выглядит код на стороне сервера, который обрабатывает кнопку «Отправить сообщение» кнопки отправки. Этот пример удалит флажок из таблицы в веб-браузере пользователя, но это не повлияет на все, что содержится в базе данных.

+0

Да, вы правы, потому что он удаляет, но не получает сохранение в базе данных. На самом деле у меня есть кнопка сохранения в моей форме заказа на редактирование, но это, похоже, не работает. Я использую базу данных mysql. Код на стороне сервера, вы говорите, что мне нужно что-то сделать на view.py? – Shehzad009

+0

Вам нужно, чтобы ваш код на Python обрабатывал форму. См. Этот учебник: http://www.djangobook.com/en/1.0/chapter07/ – Cuga

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, }) 

А затем в шаблоне вы первый вызов URL из функции удаления с Javascript, а затем в случае успеха вы обновить шаблон с данными [ «HTML»].

Вы можете задать этот парень: http://twitter.com/sasklacz, поскольку он пишет несколько руководств по ajax в django, чтобы дать вам точный код.

+0

Нет ли другого способа удалить без использования ajax? – Shehzad009