我在导航栏中做了一个搜索字段,当前搜索是按标题,用户名,first_name,last_name查找帖子。带有“ title”的搜索可能有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个单独的搜索字段,例如:
按标题搜索帖子:__搜索框_____
按用户名搜索帖子__搜索框____
按名字搜索帖子__搜索框____
按姓氏搜索帖子__搜索框____
这是所有组合字段的视图外观。
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”,我将拥有表单name =“ a”,表单name =“ b”,表单name =“ c”等。视图也将如何显示
这新的一页你谈论可能有4个HTML输入字段一个HTML表单,每一个都有自己name
的属性(例如:field_1
,field_2
,field_3
和field_4
)。
您的视图可能如下所示:
def get_queryset(self):
qs = super().get_queryset()
final_q = Q() # empty Q that will be OR'ed together with the other statements
if len(self.request.GET.get('field_1', '')) > 0:
final_q |= Q(title__icontains=self.request.GET['field_1'])
if len(self.request.GET.get('field_2', '')) > 0:
final_q |= Q(user__username__iexact=self.request.GET['field_2'])
if len(self.request.GET.get('field_3', '')) > 0:
final_q |= Q(user__first_name__iexact=self.request.GET['field_3'])
if len(self.request.GET.get('field_4', '')) > 0:
final_q |= Q(user__last_name__iexact=self.request.GET['field_4'])
# apply Q to queryset
qs = qs.filter(final_q)
return qs
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句