【问题标题】:Python Django - django-filters app - autogenerate searchfield based on modelPython Django - django-filters 应用程序 - 基于模型自动生成搜索字段
【发布时间】:2017-06-26 11:27:17
【问题描述】:

好的,

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

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

我有一个名为“CheckInsListView”和“CheckOutListView”的视图,我想根据 django-filters 应用程序在用户给定日期过滤这些列表。

我尝试点击此链接: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 %}

【问题讨论】:

  • 我想你忘了在表单中添加{% csrf_token %}
  • 我认为我不需要 csrf 令牌,csrf 令牌与 method="post" 一起使用...

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


【解决方案1】:
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 %}

【讨论】:

    猜你喜欢
    • 2012-04-21
    • 1970-01-01
    • 2020-05-30
    • 2018-12-05
    • 1970-01-01
    • 2019-09-08
    • 2021-01-03
    • 2018-03-23
    • 2020-11-02
    相关资源
    最近更新 更多