如何在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(在表单中)应用过滤器来获取帖子
答案 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中输入你想要过滤的属性,它将负责其余的事情。