如何在 Django 的数据 table 中创建过滤器列?

How to create a filter a column in a data table in Django?

我的 Django 项目中有一个数据 table。此数据 table 用于列出客户。客户具有姓名、国家/地区、电子邮件等属性...我想放置一个按钮,例如用于列出客户国家/地区的下拉菜单。 (Excel-like or similar logic)但我只需要在国家列中使用它。 我该怎么做?

我尝试使用 django-filters 但没有成功。

customer_list.html

{% extends "layouts/base.html" %}

{% block title %} Customer List {% endblock %}

<!-- Specific Page CSS goes HERE  -->
{% block stylesheets %}{% endblock stylesheets %}

{% block content %}

    <div class="content">
        <div class="page-inner">
            <div class="page-header">
                <div class="row">
                    <div class="col">
                        <h4 class="page-title">Customer List</h4>
                    </div>

                    <div class="col">
                        <a href="/customer">
                            <button class="btn btn-primary btn-round" style="">Add new customer</button>
                        </a>
                    </div>
            </div>

            </div>

            <div class="row">


                <div class="col-md-12">
                    <div class="card">
                        <div class="card-header">
                            <h4 class="card-title">My Customers</h4>
                        </div>


                        <div class="card-body">
                            <div class="table-responsive">
                            <form method="get">
                                {{ myFilter.form.as_p }}
                                <button class="btn btn-primary" type="submit">Filter</button>
                            </form>
                                <table id="multi-filter-select" class="display table table-striped table-hover grid_" >
                                    <thead>
                                        <tr>
                                            <!-- class="filter" -->
                                            <th index="0">Customer Name</th>
                                            <th>Country</th>
                                            <th>E-Mail</th>
                                            <th>Phone</th>
                                            <th>VAT Number</th>
                                            <th>Operations</th>
                                        </tr>
                                    </thead>
                                    <tfoot>
                                        <tr>
                                            <th>Customer Name</th>
                                            <th>Country</th>
                                            <th>E-Mail</th>
                                            <th>Phone</th>
                                            <th>VAT Number</th>
                                            <th>Quick Operations</th>
                                        </tr>
                                    </tfoot>
                                    <tbody>
                                    {% for customer in customer_list %}
                                        <tr>
                                            <td>{{customer.customer_name}}</td>
                                            <td>{{customer.country}}</td>
                                            <td>{{customer.email}}</td>
                                            <td>{{customer.telephone}}</td>
                                            <td>{{customer.VATnumber}}</td>
                                            <td>
                                                <div class="row">
                                                    <a href="/customers/{{ customer.id }}/profile" class="btn btn-outline-primary btn-sm" data-toggle="tooltip" title="View Customer" ><i class="fas fa-eye"></i></a>
                                                    <a href="/customers/{{ customer.id }}/update" class="btn btn-outline-primary btn-sm" data-toggle="tooltip" title="Update Info" ><i class="fas fa-edit"></i></a>
                                                    <a href="/pdfs/{{ customer.id }}/list" class="btn btn-outline-primary btn-sm"><i class="fas fa-chart-line" data-toggle="tooltip" title="View Analyses" ></i></a>
                                                </div>
                                            </td>
                                        </tr>
                                    {% endfor %}
                                    </tbody>
                                </table>
                            </div>
                        </div>
                    </div>
                </div>

            </div>
        </div>
    </div>


<style>
/* Styles go here */

table thead tr td{
  background-color : gray;
  min-width : 100px;
  position: relative;
}

.filter{
  position: relative;
  border: solid 1px;
  top : 20px;
  background-color : red;
  width:100px;
  right:0;
}
</style>


{% endblock content %}

<!-- Specific Page JS goes HERE  -->
{% block javascripts %}


    <script src="/static/assets/js/setting-demo2.js"></script>
    <script>$('#basic-datatables').DataTable();

    $('#multi-filter-select').DataTable( {
    "pageLength": 5,
    initComplete: function () {
        this.api().columns().every( function () {
            var column = this;
            var select = $('')
            .appendTo( $(column.footer()).empty() )
            .on( 'change', function () {
                var val = $.fn.dataTable.util.escapeRegex(
                    $(this).val()
                    );

                column
                .search( val ? '^'+val+'$' : '', true, false )
                .draw();
            } );

            column.data().unique().sort().each( function ( d, j ) {
                select.append( ''+d+'' )
            } );
        } );
    }
});
</script>
<script>






</script>

{% endblock javascripts %}

views.py

def customer_list(request):
    current_user = request.user
    userP = UserProfile.objects.get_or_create(username=current_user)
    customer_list = Customer.objects.filter(company=userP[0].company.comp_name)
    myFilter = TableFilter(request.GET, queryset=customer_list.all())


    context = {
        'customer_list': customer_list,
        'myFilter': myFilter

    }
    return render(request, 'customer_list.html', context)

filters.py

import django_filters
from .models import *


class TableFilter(django_filters.FilterSet):
    class Meta:
        model = Customer
        fields = 'country',

很明显,您发布的代码只是代码的一部分,因此不可能看到所有可能阻止它工作的问题,部分问题是您的 filters.py 应该有方括号,没有逗号。它应该是:

fields = ['country']