如何在 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']
我的 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']