Django:如何在django通用listView中检索表单搜索参数

时间:2017-03-06 23:23:49

标签: django html5 django-views

如何在django通用listView中检索表单搜索参数。我的网址是:

url(r'postsearch$', views.PostsList.as_view(), name='postsearch'),

我的通用列表视图是:

class PostsList(generic.ListView):
model = Post
template_name = 'posts/post_list.html'

def get_queryset(self):
    localisation = #how to get location
    discipline = #how to get discipline

    return Post.objects.filter(.......)

我的表格是:

<form class="form-inline text-center" action="{% url 'posts:postsearch' %}" id="form-searchLessons" method="get">
      <div class="form-group">
        <input type="text" class="form-control" id="typeCours" list="matieres" placeholder="Matieres: e.g. Math, Physique,.." name="discipline">
          <datalist id="matieres">
              <option value="value1">
              <option value="value2">
          </datalist>
      </div>
      <div class="form-group">
        <input type="text" class="form-control" id="Localisation" placeholder="Lieu: Bousaada, Douaouda,.." 
                name="localisation" onFocus="geolocate()">
      </div>
      <button type="submit" class="btn btn-default" id="btn-getLessons">
        <span class="glyphicon glyphicon-search" aria-hidden="true"></span> Trouver !
      </button>
    </form>

我希望根据搜索字段中引入的lacalisation和matieres(在表单中)应用过滤器来获取帖子

2 个答案:

答案 0 :(得分:0)

您可以将搜索字词添加到url正则表达式中。

url(r'postsearch/(?P<localisation>\w+)/(?P<descipline>\w+)/$', views.PostsList.as_view(), name='postsearch'),

(注意,请注意尾随斜杠)

get_queryset方法中,您可以使用这些给定的网址参数

def get_queryset(self):
    localisation = self.kwargs['localisation'] or None
    discipline = self.kwargs['discipline'] or None
    filters = {}

    if localisation:
         filters.update(localisation: localisation)
    if discipline:
         filters.update(discipline: discipline)

    return Post.objects.filter(**filters)

最终您应该将参数重新定位到get_queryset之外,但这取决于您。

我不确定这样做的安全风险。如果您在此操作过程中有更多关于安全风险的信息,请分享。

答案 1 :(得分:0)

我构建了一个可以帮助你解决这个问题的库,你只需要在searchable_fields中输入你想要过滤的属性,它将负责其余的事情。

https://github.com/SchroterQuentin/django-search-listview