如何在Django中使用单个字段创建精简或高级搜索

时间:2018-04-09 18:45:39

标签: django

我在导航栏中创建了一个搜索字段,目前搜索按标题,用户名,first_name,last_name查找帖子。使用“标题”搜索可能有100个结果,依此类推。

我目前在导航栏中搜索我要保留的内容

<form class="navbar-form navbar-left" action="{% url 'posts:all' %}">
      <div class="form-group">
       <input type="text" class="form-control" placeholder="Search" name="q">
      </div>
     <button type="submit" class="btn btn-default">Submit</button>
</form>

我现在想要创建一个精致的搜索页面(一个新的页面)。在该页面中将有4个单独的搜索字段, 例如:

按标题搜索帖子:__搜索框_____

按用户名搜索帖子__搜索框____

按first_name __ Search box____搜索帖子

按last_name搜索帖子__搜索框_____

这是视图查找所有字段的组合方式。

class Postlist(SelectRelatedMixin, ListView):
model = Post
select_related = ('user', 'group')
def get_queryset(self):
    queryset = super(Postlist, self).get_queryset()
    query = self.request.GET.get('q')
    if query:
        queryset = queryset.filter(
            Q(title__icontains=query)|
            Q(user__username__iexact=query)|
            Q(user__first_name__iexact=query)|
            Q(user__last_name__iexact=query)

        )
    return queryset

如果问题太基础我很抱歉我是django的初学者。我该怎么做呢是否会有4个不同名称的表格。示例而不是name =“q”,我是否可以使用表单名称=“a”,表单名称=“b”,表单名称=“c”等。此外,视图将如何显示

2 个答案:

答案 0 :(得分:1)

您可以在一个表单中包含4个搜索字段,在视图功能中,您可以检查每个字段的值并进行相应的查询。

您可以print(request.GET)查看所有字段名称,然后访问每个字段,如:

request.GET['field1']

答案 1 :(得分:1)

您所谈论的新页面可能包含一个包含4个HTML输入字段的HTML表单,每个字段都有自己的name属性(例如:field_1field_2,{{1 }和field_3)。

您的观点可能如下所示:

field_4