【问题标题】:Django-Filter: Dynamically Create Queryset on Search or Hide Queryset until SearchDjango-Filter:在搜索时动态创建查询集或隐藏查询集直到搜索
【发布时间】:2017-08-22 21:04:54
【问题描述】:

我正在使用django-filter 搜索模型。代码如下:

filters.py:

class PersonFilter(django_filters.FilterSet):
    lastName = django_filters.CharFilter(lookup_expr='icontains')
    firstName = django_filters.CharFilter(lookup_expr='icontains')
    class Meta:
        model = Person
        fields = ['lastName', 'firstName']

views.py:

def search(request):
    people = Person.objects.all()
    people = PersonFilter(request.GET, queryset=people)
    context = {'filter': people}
    return render(request, 'myapp/template.html', context)

模板.html:

<form method="get">
    {{ filter.form.as_p }}
    <button type="submit">Search</button>
  </form>
  <table>
  {% for field in filter.qs %}
  <tr>
    <td>
      {{ field.idno }}
    </td>
    <td>
      {{ field.lastName }}
    </td>
    <td>
      {{ field.firstName }}
    </td>
    <td>
      {{ field.status }}
    </td>
  </tr>
  {% endfor %}
</table>
{% endblock %}
</body>
</html>

现在,这会生成一个与我的模型相似的表格,其中包含名字和姓氏的搜索框。搜索工作完美。

如何防止数据表最初显示?从逻辑上讲,这可以在表面上完成(隐藏),或者更好的是,实质上(动态创建查询集)。这可能吗?

【问题讨论】:

    标签: python django python-3.x django-filter


    【解决方案1】:

    您可以利用 FilterSet 的 is_bound 属性,但您需要更改视图代码以仅在提交表单时提供请求查询参数。

    def search(request):
        submitted = 'submitted' in request.GET
        data = request.GET if submitted else None
        people = PersonFilter(data, queryset=Person.objects.all())
    
        return render(request, 'myapp/template.html', {'filter': people})
    
    <form method="get">
        {{ filter.form.as_p }}
        <button type="submit" name="submitted">Search</button>
                         <!-- ^^^^ added 'name' parameter -->
    </form>
    
    {% if filter.is_bound %}
    <table>
    {% for person in filter.qs %}
    ...
    

    【讨论】:

      猜你喜欢
      • 2014-02-15
      • 2015-02-24
      • 1970-01-01
      • 2020-04-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多