我使用django-filters和django-tables2。 该表运行良好,并在屏幕上显示记录。 但是当我点击Filter按钮时没有任何反应。 请参阅下面的代码和图像。
tables.py
class servicotable(tables.Table):
class Meta:
model = servico
fields = (
'id',
'dat_servico',
'tiposervico',
'num_protocolo',
)
class filteredservicolistview(SingleTableMixin, FilterView):
table_class = servicotable
model = servico
filterset_class = servicofilter
filters.py
class servicofilter(django_filters.FilterSet):
dat_servico = django_filters.DateFromToRangeFilter()
class Meta:
model = servico
fields = ['num_protocolo', 'dat_servico', 'statusservico', 'tiposervico', 'usuario']
views.py
def consulta_create(request, id=None):
queryset = servico.objects.all()
f = servicofilter(request.GET, queryset=queryset)
table = servicotable(f.queryset)
table.paginate(page=request.GET.get('page', 1), per_page=25)
RequestConfig(request).configure(table)
context = {
"filter": f,
"lista": table,
}
return render(request, 'consulta/consultateste.html', context)
consultateste.html
{% load render_table from django_tables2 %}
{% load bootstrap3 %}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
{% if filter %}
<form action="" method="get" class="form form-inline">
{% bootstrap_form filter.form layout='inline' %}
{% bootstrap_button 'filter' %}
</form>
{% endif %}
{% render_table lista 'django_tables2/bootstrap.html' %}
</body>
</html>
答案 0 :(得分:0)
再看一下,我认为您需要将table = servicotable(f.queryset)
更改为table = servicotable(f.qs)
。
FilterSet.qs
是具有已过滤查询集的属性。 queryset
存储您传递给对象的查询集,因此在这种情况下,all()
!
(作为旁注,我认为它可能有助于你的代码使用camelcasing对象名称来区分它们与函数。)