【发布时间】:2021-11-29 22:38:16
【问题描述】:
我有一个网页,它显示用户的详细信息,例如他们的名字和姓氏、用户名、电子邮件等。但我只能在搜索栏中搜索用户的名字或姓氏,我该怎么做使用户能够输入用户的名字和姓氏并显示详细信息吗?
这就是我的网页如下图所示的样子(例如:员工姓名显示为 admin(名字)和 Tan(姓氏):
views.py
@login_required()
def allstaff(request):
search_post = request.GET.get('q')
if (search_post is not None) and search_post:
allusername = User.objects.filter(Q(first_name__icontains=search_post) | Q(last_name__icontains=search_post) | Q(
username__icontains=search_post) | Q(email__icontains=search_post))
if not allusername:
allusername = User.objects.all().order_by("-date_joined")
else:
allusername = User.objects.all().order_by("-date_joined")
page = request.GET.get('page')
paginator = Paginator(allusername, 3)
try:
allusername = paginator.page(page)
except PageNotAnInteger:
allusername = paginator.page(1)
except EmptyPage:
allusername = paginator.page(paginator.num_pages)
context = {'allusername': allusername, 'query': search_post}
return render(request, 'allstaff.html', context)
allstaff.html
{% extends "home.html" %}
{% block content %}
<style>
table {
border-collapse:separate;
border:solid black 1px;
border-radius:6px;
-moz-border-radius:6px;
}
td, th {
border-left:solid black 1px;
border-top:solid black 1px;
}
th {
border-top: none;
}
td:first-child, th:first-child {
border-left: none;
}
</style>
<div style="padding-left:16px">
<br>
<div class="form-block">
<h5>Search for Staff First Name/ Staff Username</h5>
<form class="form-inline my-2 my-lg-0" action="{% url 'allstaff' %}" method='GET' value='{{ request.GET.q }}'>
<input class="form-control mr-sm-2" type="text" placeholder="Search" aria-label="Search" name="q" value='{{ request.GET.q }}'/>
<button class="btn btn-outline-success my-2 my-sm-0" type="submit">Search</button>
</form>
<br>
<div class="form-block">
<table>
<tr>
<th>Staff Name</th>
<th>Staff Username</th>
<th>Email</th>
<th>Date Joined</th>
<th>Last Login</th>
<th>Admin</th>
<th>Customer Service</th>
<th>Logistic</th>
<th>Action</th>
</tr>
{% for user in allusername %}
<tr>
<td>{{user.first_name}} {{user.last_name}}</td>
<td>{{user.username}}</td>
<td>{{user.email}}</td>
<td>{{user.date_joined}}</td>
<td>{{user.last_login}}</td>
<td>{{user.is_admin}}</td>
<td>{{user.is_customer}}</td>
<td>{{user.is_logistic}}</td>
<td>
<form action="{% url 'update' user.id %}" method="post">
{% csrf_token %}
<button type="submit" class="btn btn-sm btn-info">Update</button>
</form>
</td>
<td>
<form action="{% url 'delete' user.id %}" method="post">
{% csrf_token %}
<button type="submit" class="btn btn-sm btn-danger">Delete</button>
</form>
</td>
</tr>
{% endfor %}
</table>
{% if allusername.has_other_pages %}
<ul class="pagination pr-3 mr-1 ml-auto">
{% if allusername.has_previous %}
<li><a href="?q={{ query|urlencode }}&page={{ allusername.previous_page_number }}">«</a></li>
{% else %}
<li class="disabled"><span>«</span></li>
{% endif %}
{% for i in allusername.paginator.page_range %}
{% if allusername.number == i %}
<li class="active"><span>{{ i }} <span class="sr-only">(current)</span></span></li>
{% else %}
<li><a href="?q={{ query|urlencode }}&page={{ i }}">{{ i }}</a></li>
{% endif %}
{% endfor %}
{% if allusername.has_next %}
<li><a href="?q={{ query|urlencode }}&page={{ allusername.next_page_number }}">»</a></li>
{% else %}
<li class="disabled"><span>»</span></li>
{% endif %}
</ul>
{% endif %}
<br>
<h5>*Note: True means that the staff is in this role, False means that the staff is not in this role.</h5>
</div>
</div>
</div>
{% endblock %}
【问题讨论】:
-
您应该创建字段,该字段将具有 first_name + last_name。因为使用 sql 数据库很难进行这种查询,因为您键入“John Smith”,它会搜索 first_name =“John Smith”和 last_name="John Smith",您需要逻辑来确定名字和姓氏在哪里搜索框。如果您需要高级搜索,我建议您可以尝试使用 elasticsearch
标签: html django django-views django-templates