Django: создать форму таблицы при выборе нескольких строк - PullRequest
0 голосов
/ 27 ноября 2018

Мне нужно создать довольно прямолинейную форму с Django, но, похоже, я не могу найти подходящий инструмент для этого, возможно, из-за недостатка словарного запаса для того, что я хочу:

У меня есть таблицаn строк (n варьируется), каждая строка представляет объект базы данных.Я хочу поставить флажок слева от каждой строки, чтобы иметь возможность выбрать несколько строк и применить действие, помещенное в виджет с множественным выбором вверху.

Я думал о «сериализации» deleteView с помощью formset, но в любом случаеЯ не знаю, как добавить дополнительные действия (кроме удаления).

Любая ценная информация о том, как поступить, будет приветствоваться, спасибо.

1 Ответ

0 голосов
/ 27 ноября 2018

Вы можете попробовать с Django Tables 2 .Попробуйте так:

Определить таблицу:

import django-tables2 as table


class YourTable(tables.Table):
    selection = tables.CheckBoxColumn(accessor='pk')  # Override here to show checkbox 
    class Meta:
        model = YourModel
        template_name = 'django_tables2/bootstrap.html'

Использовать таблицу в представлении:

def some_view(request):
    if request.method == "GET":
        table = YourTable(YourModel.objects.all())
        return render(request, 'template.html', context={'table': table})

Шаблон

<form method="post">
    {% csrf_token %}

    <select name="action_options">
        <option value="delete">Delete</option>
        <option value="hard_delete">Hard Delete</option>
    </select> 

    {% load render_table from django_tables2 %}  // loading template tag
    {% render_table table %}  // catching context as table from view

    <input type="submit" class="btn btn-primary" value="Delete">
</form>

Обновить представление для обработкиРазместить запрос

def some_view(request):
    ...
    if request.method == "POST":
        pks = request.POST.getlist("selection")  # handle selection from table
        action = request.POST.get('action_options')
        selected_objects = YourModel.objects.filter(pk__in=pks)
        if action == 'delete':
            selected_objects.delete()
        # Rest of your Logic
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...