django-filter没有过滤器

时间:2018-05-30 13:39:26

标签: django django-tables2 django-filters

我使用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>

enter image description here

1 个答案:

答案 0 :(得分:0)

再看一下,我认为您需要将table = servicotable(f.queryset)更改为table = servicotable(f.qs)

FilterSet.qs是具有已过滤查询集的属性。 queryset存储您传递给对象的查询集,因此在这种情况下,all()

(作为旁注,我认为它可能有助于你的代码使用camelcasing对象名称来区分它们与函数。)