Python 如何使用同一复选框选择/取消选择/删除表中的多个django项?

Python 如何使用同一复选框选择/取消选择/删除表中的多个django项?,python,django,checkbox,django-templates,Python,Django,Checkbox,Django Templates,我有这个项目表及其详细信息,我实现了一个方法,使用提交按钮“选择”一些项目,提交每个项目上的所有复选框 这是复选框的代码: <input name='quiz-pids' id='checkbox-{{ quiz.id }}' type="checkbox" value="{{ quiz.id }}" required> 如您所见,我的函数“post”只接受测验PID,因为这一行request.post.getlist('quick-pids')。现在我的问题是,我还想删除和取消选

我有这个项目表及其详细信息,我实现了一个方法,使用提交按钮“选择”一些项目,提交每个项目上的所有复选框

这是复选框的代码:

<input name='quiz-pids' id='checkbox-{{ quiz.id }}' type="checkbox" value="{{ quiz.id }}" required>
如您所见,我的函数“post”只接受测验PID,因为这一行
request.post.getlist('quick-pids')
。现在我的问题是,我还想删除和取消选择我的项目。但是,因为我的函数只能接受测验PID,所以我不能为它创建另一个按钮


我试过的 我尝试添加更多功能:

def post (self, request, *args, **kwargs):
    # get the selected quizs
    quizs = request.POST.getlist('quiz-pids')
    deleted_items = request.POST.getlist('delete-pids')
    unselect_items = request.POST.getlist('unselect-pids')
    # retrieves thoses quizes from the database:
    print("pids returned are ", quizs)
    # items = ItemBatch.objects.filter(pid__in=quizs)

    for i in quizs:
        print("before", i)
        i = get_object_or_404(ItemBatch, id=i)
        i.rtd = 'True'
        i.save()
        print("after", i.truck_type)  # print("items are",items)

    for j in unselect_items:
        j = get_object_or_404(ItemBatch, id=i)
        j.rtd = 'False'
        j.save()

    for k in deleted_items:
        k = get_object_or_404(ItemBatch, id=i)
        k.delete()
        k.save()
但是,由于我的项目前面的每个复选框都有名称
name='quick-pids'
,因此我无法生成删除的项目列表或取消选择的项目列表。我不可能给每个项目都设置三个不同的复选框。我该怎么办

以下是我完整的html和视图功能:

@method_decorator([login_required, teacher_required], name='dispatch')
class UploadedItems(ListView):
    model = ItemBatch
    ordering = ('uploaded',)
    context_object_name = 'plan'
    template_name = 'classroom/teachers/item_list.html'

    def get_queryset (self):
        return ItemBatch.objects.filter(uploaded_by=self.request.user)

    def get_context_data (self, **kwargs):
        context = super().get_context_data(**kwargs)
        latest = ItemBatch.objects.filter(uploaded_by=self.request.user).order_by('-time').annotate(
            truncated_time=Trunc('time', 'minute', output_field=DateTimeField()))

        context['last'] = ItemBatch.objects.filter(uploaded_by=self.request.user).annotate(
            truncated_time=Trunc('time', 'minute', output_field=DateTimeField())).filter(
            truncated_time=Subquery(latest.values('truncated_time')[:1])).order_by('-rtd')
        return context

    def post (self, request, *args, **kwargs):
        # get the selected quizs
        quizs = request.POST.getlist('quiz-pids')
        deleted_items = request.POST.getlist('delete-pids')
        unselect_items = request.POST.getlist('unselect-pids')
        # retrieves thoses quizes from the database:
        print("pids returned are ", quizs)
        # items = ItemBatch.objects.filter(pid__in=quizs)

        for i in quizs:
            print("before", i)
            i = get_object_or_404(ItemBatch, id=i)
            i.rtd = 'True'
            i.save()
            print("after", i.truck_type)  # print("items are",items)

        for j in unselect_items:
            j = get_object_or_404(ItemBatch, id=i)
            j.rtd = 'False'
            j.save()

        for k in deleted_items:
            k = get_object_or_404(ItemBatch, id=i)
            k.delete()
            k.save()

        print("pids converted are ", quizs)

        return redirect('teachers:upload_batch')
HTML模板:

{% extends 'base2.html' %}
{% load static %}
{% load tz humanize %}
{% timezone "Asia/Kolkata" %}
    {% block content %}
        <h2>Orders</h2>
        {% include 'classroom/teachers/inventory_header.html' with active='myitems' %}
        <h2 class="align-left"> Your Last Uploaded Items</h2>
        {#<a href="{% url 'teachers:quiz_add' %}" class="btn btn-primary mb-3" role="button">Post New Bid</a>#}
        <div class="card last-items">
            <form method="post" novalidate>
                {% csrf_token %}
                <table class="table table-striped mb-0" id="items">
                    <thead>
                    <tr>
                        <th>Select</th>
                        <th>Name</th>
                        <th>SKU ID</th>
                        <th>Quantity</th>
                        <th>Dimensions</th>
                        <th>Volume/Weight</th>
                        <th>Origin</th>
                        <th>Destination</th>
                        <th>Type</th>
                        <th>Uploaded</th>
                        <th>Dispatch Status</th>
                    </tr>
                    </thead>

                    <tbody>
                    <input type="checkbox" id="selectall" class="css-checkbox btn btn-primary" name="selectall"/>Select
                    All

                    {% for quiz in last %}
                        <input type="submit" class="btn btn-primary select-btn myitems-select-btn"
                               value='Finalize Items'
                               required>

                        <input type="submit" class="btn btn-primary select-btn myitems-select-btn"
                               value='Unselect Items'
                               required>

                        <input type="submit" class="btn btn-primary select-btn myitems-select-btn"
                               value='Delete Items'
                               required>

                        <a href="{% url 'teachers:pack_it' %}"
                           class="btn btn-primary mb-3 myitems-select-btn  {% if quiz.rtd == 0 %} disabled {% endif %}"
                           role="button">Plan Vehicles</a>



                        <tr class="{% if quiz.rtd == True %} active{% endif %} {% if quiz.is_dispatched == True %} dispatched{% endif %}">
                            <td class="align-middle"><input name='quiz-pids' id='checkbox-{{ quiz.id }}'
                                                            type="checkbox" value="{{ quiz.id }}" required
                                    {% if quiz.is_dispatched == 1 %} disabled{% endif %} ></td>

                            <td class="align-middle">{{ quiz.name }}</td>
                            <td class="align-middle">{{ quiz.pid }}</td>
                            <td class="align-middle">{{ quiz.quantity }}</td>
                            <td class="align-middle">{{ quiz.length }}x{{ quiz.width }}x{{ quiz.height }}</td>
                            <td class="align-middle">{{ quiz.volume|truncatechars:8 }}/{{ quiz.weight }}</td>
                            <td class="align-middle">{{ quiz.origin }}</td>
                            <td class="align-middle">{{ quiz.destination }}</td>
                            <td class="align-middle">{{ quiz.truck_type }}</td>
                            <td class="align-middle">{{ quiz.time|naturaltime }}</td>
                            <td class="align-middle">{{ quiz.is_dispatched|yesno:"Dispatched,Ready to Dispatch" }}</td>
                        </tr>


                    {% endfor %}


                    </tbody>

                </table>
            </form>
        </div>

        <br>
        <br>
        <h2 class="align-left">All your Uploaded Items</h2>
        <br>

        <div class="card">
            <table class="table table-striped mb-0" id="items">
                <thead>
                <tr>
                    <th>Select</th>
                    <th>Name</th>
                    <th>SKU ID</th>
                    <th>Quantity</th>
                    <th>Dimensions</th>
                    <th>Volume/Weight</th>
                    <th>Origin</th>
                    <th>Destination</th>
                    <th>Type</th>
                    <th>Uploaded</th>
                    <th>Dispatch Status</th>
                </tr>
                </thead>
                <tbody>
                <form method="post" novalidate>
                    {% csrf_token %}
                    {% for quiz in plan %}
                        <input type="submit" class="btn btn-primary select-btn myitems-select-btn"
                               value='Finalize Items'
                               required>

                        <a href="{% url 'teachers:pack_it' %}"
                           class="btn btn-primary mb-3 myitems-select-btn  {% if quiz.rtd == 0 %} disabled {% endif %}"
                           role="button">Plan Vehicles</a>



                        <tr class="{% if quiz.rtd == True %} active{% endif %} {% if quiz.is_dispatched == True %} dispatched{% endif %}">
                            <td class="align-middle"><input name='quiz-pids' id='checkbox-{{ quiz.id }}'
                                                            type="checkbox" value="{{ quiz.id }}" required
                                    {% if quiz.is_dispatched == 1 %} disabled{% endif %} ></td>

                            <td class="align-middle">{{ quiz.name }}</td>
                            <td class="align-middle">{{ quiz.pid }}</td>
                            <td class="align-middle">{{ quiz.quantity }}</td>
                            <td class="align-middle">{{ quiz.length }}x{{ quiz.width }}x{{ quiz.height }}</td>
                            <td class="align-middle">{{ quiz.volume }}/{{ quiz.weight }}</td>
                            <td class="align-middle">{{ quiz.origin }}</td>
                            <td class="align-middle">{{ quiz.destination }}</td>
                            <td class="align-middle">{{ quiz.truck_type }}</td>
                            <td class="align-middle">{{ quiz.time|naturaltime }}</td>
                            <td class="align-middle">{{ quiz.is_dispatched|yesno:"Dispatched,Ready to Dispatch" }}</td>
                        </tr>
                        <tr>
                            {% empty %}
                            <td class="bg-light text-center font-italic" colspan="9">You haven't uploaded any items yet.
                            </td>
                        </tr>

                    {% endfor %}


                </form>


                </tbody>
            </table>
        </div>

        <link rel="stylesheet" href="http://cdn.datatables.net/1.10.13/css/jquery.dataTables.min.css">
        {#        <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.0/jquery.min.js"></script>#}
        <script src="https://cdn.datatables.net/1.10.13/js/jquery.dataTables.min.js"></script>

        <script>
            $(document).ready(function () {
                $('#items').DataTable({
                    "pagingType": "full_numbers",
                    "bDestroy": true
                });
            });
        </script>


        <script>

            $('#selectall').click(function () {
                var checkedStatus = this.checked;
                $('input:checkbox').each(function () {
                    $(this).prop('checked', checkedStatus);
                });
            });

        </script>

    {% endblock %}
{% endtimezone %}
{%extends'base2.html%}
{%load static%}
{%load tz humanize%}
{%时区“亚洲/加尔各答”%}
{%block content%}
命令
{%include'school/teachers/inventory_header.html'和active='myitems'%}
您上次上载的项目
{##}
{%csrf_令牌%}
挑选
名称
SKU ID
量
尺寸
体积/重量
起源
目的地
类型
上传
调度状态
挑选
全部的
{上一次测验的百分比为%}
{{quick.name}
{{quick.pid}
{{quick.quantity}
{{quick.length}x{{quick.width}x{{quick.height}
{{quick.volume}truncatechars:8}/{{quick.weight}
{{quick.origin}
{{quick.destination}
{{quick.truck_type}
{{测验时间{自然时间}
{{quick.is|u dispatched | yesno:“dispatched,Ready to dispatched”}
{%endfor%}


您上传的所有项目
挑选 名称 SKU ID 量 尺寸 体积/重量 起源 目的地 类型 上传 调度状态 {%csrf_令牌%} {%计划中的测验%} {{quick.name} {{quick.pid} {{quick.quantity} {{quick.length}x{{quick.width}x{{quick.height} {{quick.volume}/{{quick.weight} {{quick.origin} {{quick.destination} {{quick.truck_type} {{测验时间{自然时间} {{quick.is|u dispatched | yesno:“dispatched,Ready to dispatched”} {%empty%} 您尚未上载任何项目。 {%endfor%} {# #} $(文档).ready(函数(){ $('#items')。数据表({ “pagingType”:“完整编号”, “bDestroy”:正确 }); }); $('#selectall')。单击(函数(){ var checkedStatus=this.checked; $('input:checkbox')。每个(函数(){ $(this).prop('checked',checkedStatus); }); }); {%endblock%} {%endtimezone%}
有人怀疑吗?还是需要更多的信息

@method_decorator([login_required, teacher_required], name='dispatch')
class UploadedItems(ListView):
    model = ItemBatch
    ordering = ('uploaded',)
    context_object_name = 'plan'
    template_name = 'classroom/teachers/item_list.html'

    def get_queryset (self):
        return ItemBatch.objects.filter(uploaded_by=self.request.user)

    def get_context_data (self, **kwargs):
        context = super().get_context_data(**kwargs)
        latest = ItemBatch.objects.filter(uploaded_by=self.request.user).order_by('-time').annotate(
            truncated_time=Trunc('time', 'minute', output_field=DateTimeField()))

        context['last'] = ItemBatch.objects.filter(uploaded_by=self.request.user).annotate(
            truncated_time=Trunc('time', 'minute', output_field=DateTimeField())).filter(
            truncated_time=Subquery(latest.values('truncated_time')[:1])).order_by('-rtd')
        return context

    def post (self, request, *args, **kwargs):
        # get the selected quizs
        quizs = request.POST.getlist('quiz-pids')
        deleted_items = request.POST.getlist('delete-pids')
        unselect_items = request.POST.getlist('unselect-pids')
        # retrieves thoses quizes from the database:
        print("pids returned are ", quizs)
        # items = ItemBatch.objects.filter(pid__in=quizs)

        for i in quizs:
            print("before", i)
            i = get_object_or_404(ItemBatch, id=i)
            i.rtd = 'True'
            i.save()
            print("after", i.truck_type)  # print("items are",items)

        for j in unselect_items:
            j = get_object_or_404(ItemBatch, id=i)
            j.rtd = 'False'
            j.save()

        for k in deleted_items:
            k = get_object_or_404(ItemBatch, id=i)
            k.delete()
            k.save()

        print("pids converted are ", quizs)

        return redirect('teachers:upload_batch')
{% extends 'base2.html' %}
{% load static %}
{% load tz humanize %}
{% timezone "Asia/Kolkata" %}
    {% block content %}
        <h2>Orders</h2>
        {% include 'classroom/teachers/inventory_header.html' with active='myitems' %}
        <h2 class="align-left"> Your Last Uploaded Items</h2>
        {#<a href="{% url 'teachers:quiz_add' %}" class="btn btn-primary mb-3" role="button">Post New Bid</a>#}
        <div class="card last-items">
            <form method="post" novalidate>
                {% csrf_token %}
                <table class="table table-striped mb-0" id="items">
                    <thead>
                    <tr>
                        <th>Select</th>
                        <th>Name</th>
                        <th>SKU ID</th>
                        <th>Quantity</th>
                        <th>Dimensions</th>
                        <th>Volume/Weight</th>
                        <th>Origin</th>
                        <th>Destination</th>
                        <th>Type</th>
                        <th>Uploaded</th>
                        <th>Dispatch Status</th>
                    </tr>
                    </thead>

                    <tbody>
                    <input type="checkbox" id="selectall" class="css-checkbox btn btn-primary" name="selectall"/>Select
                    All

                    {% for quiz in last %}
                        <input type="submit" class="btn btn-primary select-btn myitems-select-btn"
                               value='Finalize Items'
                               required>

                        <input type="submit" class="btn btn-primary select-btn myitems-select-btn"
                               value='Unselect Items'
                               required>

                        <input type="submit" class="btn btn-primary select-btn myitems-select-btn"
                               value='Delete Items'
                               required>

                        <a href="{% url 'teachers:pack_it' %}"
                           class="btn btn-primary mb-3 myitems-select-btn  {% if quiz.rtd == 0 %} disabled {% endif %}"
                           role="button">Plan Vehicles</a>



                        <tr class="{% if quiz.rtd == True %} active{% endif %} {% if quiz.is_dispatched == True %} dispatched{% endif %}">
                            <td class="align-middle"><input name='quiz-pids' id='checkbox-{{ quiz.id }}'
                                                            type="checkbox" value="{{ quiz.id }}" required
                                    {% if quiz.is_dispatched == 1 %} disabled{% endif %} ></td>

                            <td class="align-middle">{{ quiz.name }}</td>
                            <td class="align-middle">{{ quiz.pid }}</td>
                            <td class="align-middle">{{ quiz.quantity }}</td>
                            <td class="align-middle">{{ quiz.length }}x{{ quiz.width }}x{{ quiz.height }}</td>
                            <td class="align-middle">{{ quiz.volume|truncatechars:8 }}/{{ quiz.weight }}</td>
                            <td class="align-middle">{{ quiz.origin }}</td>
                            <td class="align-middle">{{ quiz.destination }}</td>
                            <td class="align-middle">{{ quiz.truck_type }}</td>
                            <td class="align-middle">{{ quiz.time|naturaltime }}</td>
                            <td class="align-middle">{{ quiz.is_dispatched|yesno:"Dispatched,Ready to Dispatch" }}</td>
                        </tr>


                    {% endfor %}


                    </tbody>

                </table>
            </form>
        </div>

        <br>
        <br>
        <h2 class="align-left">All your Uploaded Items</h2>
        <br>

        <div class="card">
            <table class="table table-striped mb-0" id="items">
                <thead>
                <tr>
                    <th>Select</th>
                    <th>Name</th>
                    <th>SKU ID</th>
                    <th>Quantity</th>
                    <th>Dimensions</th>
                    <th>Volume/Weight</th>
                    <th>Origin</th>
                    <th>Destination</th>
                    <th>Type</th>
                    <th>Uploaded</th>
                    <th>Dispatch Status</th>
                </tr>
                </thead>
                <tbody>
                <form method="post" novalidate>
                    {% csrf_token %}
                    {% for quiz in plan %}
                        <input type="submit" class="btn btn-primary select-btn myitems-select-btn"
                               value='Finalize Items'
                               required>

                        <a href="{% url 'teachers:pack_it' %}"
                           class="btn btn-primary mb-3 myitems-select-btn  {% if quiz.rtd == 0 %} disabled {% endif %}"
                           role="button">Plan Vehicles</a>



                        <tr class="{% if quiz.rtd == True %} active{% endif %} {% if quiz.is_dispatched == True %} dispatched{% endif %}">
                            <td class="align-middle"><input name='quiz-pids' id='checkbox-{{ quiz.id }}'
                                                            type="checkbox" value="{{ quiz.id }}" required
                                    {% if quiz.is_dispatched == 1 %} disabled{% endif %} ></td>

                            <td class="align-middle">{{ quiz.name }}</td>
                            <td class="align-middle">{{ quiz.pid }}</td>
                            <td class="align-middle">{{ quiz.quantity }}</td>
                            <td class="align-middle">{{ quiz.length }}x{{ quiz.width }}x{{ quiz.height }}</td>
                            <td class="align-middle">{{ quiz.volume }}/{{ quiz.weight }}</td>
                            <td class="align-middle">{{ quiz.origin }}</td>
                            <td class="align-middle">{{ quiz.destination }}</td>
                            <td class="align-middle">{{ quiz.truck_type }}</td>
                            <td class="align-middle">{{ quiz.time|naturaltime }}</td>
                            <td class="align-middle">{{ quiz.is_dispatched|yesno:"Dispatched,Ready to Dispatch" }}</td>
                        </tr>
                        <tr>
                            {% empty %}
                            <td class="bg-light text-center font-italic" colspan="9">You haven't uploaded any items yet.
                            </td>
                        </tr>

                    {% endfor %}


                </form>


                </tbody>
            </table>
        </div>

        <link rel="stylesheet" href="http://cdn.datatables.net/1.10.13/css/jquery.dataTables.min.css">
        {#        <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.0/jquery.min.js"></script>#}
        <script src="https://cdn.datatables.net/1.10.13/js/jquery.dataTables.min.js"></script>

        <script>
            $(document).ready(function () {
                $('#items').DataTable({
                    "pagingType": "full_numbers",
                    "bDestroy": true
                });
            });
        </script>


        <script>

            $('#selectall').click(function () {
                var checkedStatus = this.checked;
                $('input:checkbox').each(function () {
                    $(this).prop('checked', checkedStatus);
                });
            });

        </script>

    {% endblock %}
{% endtimezone %}