Python Django - django-filters app - 基于模型自动生成搜索域

时间:2017-06-26 11:27:18

标签: python django search django-forms django-filter

好的,

我第一次在这里问一个问题,我确实搜索了类似的问题,但还没有找到答案..

我正在使用Django开发一个简单的交付应用程序,它显示了客户签入和退出的概述以及交付的一些细节。

我有一个名为" CheckInsListView"和" CheckOutListView"我想基于django-filters app在用户指定的日期过滤这些列表。

我尝试点击此链接:https://simpleisbetterthancomplex.com/tutorial/2016/11/28/how-to-filter-querysets-dynamically.html

现在的问题是,搜索表单不会自动创建。它确实显示了提交按钮,但尚未生成表单域。它也没有出现任何错误。

有人能指出我在这里失踪的东西吗?

提前致谢,

凯文

#filters.py
   from .models import Delivery
   import django_filters

   class DeliveryFilter(django_filters.FilterSet):

    class Meta:
        model = Delivery
        fields = ['arrival_date']

添加视图:

#views.py  
"""
Create a search view to sort deliveries on date, django-filter app is used
"""

from django.shortcuts import render
from .models import Delivery
from .filters import DeliveryFilter

def search(request):
    delivery_list = Delivery.objects.all()
    delivery_filter = DeliveryFilter(request.GET, queryset=delivery_list)
    return render(request, 'all_deliveries.html', {'filter': delivery_filter})

和网址

#urls.py
from django.conf.urls import url
from . import views

urlpatterns = [
    url(r'^$', views.index, name='index'),
    url(r'^search/$', views.search, name='search'),
]

html中的表单

{% extends "framework.html" %}

{% block content %}

<div class="form_search_header">
        <form method="get">
            {{ filter.form.as_p }}
            <button type="submit">Search</button>
        </form>
</div>

{% endblock %}

1 个答案:

答案 0 :(得分:0)

delivery_filter = DeliveryFilter(request.GET, queryset=delivery_list)

这仍然会返回过滤后的记录。你需要在模板中编写一个for循环,如下所示:

<option value="" disabled selected>Select Delivery Item</option>
{% for d in filter %}
<option value="{{ d.id }}">{{ d.arrival_date }}</option>
{% endfor %}