如何在Django的数据表中创建一个列过滤器?



我有一个数据表在我的Django项目。此数据表用于列出客户。客户有姓名、国家、电子邮件等属性。我想把一个按钮像一个下拉菜单列出客户的国家。(类似excel或类似的逻辑)但我只需要这个在国家列。我该怎么做呢?

我尝试使用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',

很明显,你所发布的代码只是代码的一部分,所以不可能看到所有可能阻止它工作的问题,部分问题是字段参数在你的过滤器。py应该有方括号,没有逗号。它应该是:

fields = ['country']

最新更新