Как удалить флажок, если он отмечен? - PullRequest
0 голосов
/ 03 февраля 2011

У меня есть шаблон, который отображает список предметов. Он имеет один флажок для каждого элемента. Я хочу иметь возможность удалить элемент из флажка, если флажок установлен. Поэтому мне нужна кнопка, которая удаляет элемент после того, как флажок установлен. Вот мой шаблон.

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

Ответы [ 3 ]

1 голос
/ 03 февраля 2011

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

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

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

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

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

0 голосов
/ 03 февраля 2011

Вы делаете это неправильно :) Создайте представление только для удаления.Отправьте в POST или GET id элемента (или в 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 голосов
/ 03 февраля 2011

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

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

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

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

Я также включил <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» кнопки отправки.В этом примере будет удален флажок из таблицы в веб-браузере пользователя, но он никак не повлияет на базу данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...