1.建立表单
- views.py
from django.shortcuts import render
def search_form(request):
return render(request, 'search_form.html')
- search_form.html
<html>
<head>
<title>Search</title>
</head>
<body>
<form action="/search/" method="get">
<input type="text" name="q">
<input type="submit" value="Search">
</form>
</body>
</html>
2. 用template无法显示记录
- template是这样的,看起来没问题
<html>
<head>
<title>search_results</title>
</head>
<body>
<p>{
{
employee }}</p>
<p>{
{
employee.eid }}</p>
<p>{
{
employee.name }}</p>
<p>{
{
employee.dept_code }}</p>
<p>{
{
employee.gender }}</p>
<p>{
{
employee.on_board }}</p>
<p>{
{
employee.Range }}</p>
<p>{
{
employee.subject_set.Subject_id }}</p>
</body>
- views.py好像也没问题。
views.py
# 建立查询结果界面
def search_results(request):
if 'q' in request.GET and request.GET['q']:
q = request.GET['q']
employee = Employee.objects.filter(eid=q)
return render(request, 'myclass/search_results.html',context={
'employee': employee, 'query': q})
else:
return render(request, 'myclass/search_form.html',context={
})
- 这时候可以先去shell看看具体查询情况。以下的shell中无法查询到记录,但是加入切片后就可以查询。
In [1]: from myclass.views import Subject,Employee,Teacher, Employee_Subject
In [2]: employee = Employee.objects.filter(eid='Z13073219')
In [3]: employee
Out[3]: <QuerySet [<Employee: 张三>]>
In [4]: employee.eid
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-4-2275b161e821> in <module>
----> 1 employee.eid
AttributeError: 'QuerySet' object has no attribute 'eid'
In [5]: employee[0]
Out[5]: <Employee: 张三>
In [6]: employee[0].eid
Out[6]: 'Z13073219'
- 去修改views.py
# 建立查询结果界面
def search_results(request):
if 'q' in request.GET and request.GET['q']:
q = request.GET['q']
employee = Employee.objects.filter(eid=q)[0] #增加了切片[0]
return render(request, 'myclass/search_results.html',context={
'employee': employee, 'query': q})
else:
return render(request, 'myclass/search_form.html',context={
})
3. 多对多的反向查询
employee和subject是多对多关系,可以采用employee.subject_set.all来反向查询。
<html>
<head>
<title>search_results</title>
</head>
<body>
<table>
<p>学员选课信息</p>
<tr align="center" style="color:White;background-color:#3366FF;font-family:微軟正黑體,Tahoma,Arial,微軟雅黑體;font-size:14px;">
<th scope="col">employee.eid</th>
<th scope="col">employee.name</th>
<th scope="col">employee.dept_code</th>
<th scope="col">employee.gender</th>
<th scope="col">employee.on_board</th>
<th scope="col">employee.Range</th>
<th scope="col">employee.subject.Subject_id</th>
</tr>
<tr align="center" valign="middle" style="color:Black;background-color:#EFF3FB;border-color:#E0E0E0;border-width:1px;border-style:solid;height:26px;">
<td>{
{ employee.eid }}</td>
<td>{
{ employee.name }}</td>
<td>{
{ employee.dept_code }}</td>
<td>{
{ employee.gender }}</td>
<td>{
{ employee.on_board }}</td>
<td>{
{ employee.Range }}</td>
<td>
{% for subject_item in employee.subject_set.all %}
{
{ subject_item.subject_name }}
{% endfor %}
</td>
</tr>
</table>
</body>
4. 查询全部记录
- views.py
# 建立查询结果界面-all
def search_results_all(request):
employee_list = Employee.objects.all()
return render(request, 'myclass/search_results_all.html',context={
'employee_list': employee_list})
- search_results_all.html
<html>
<head>
<title>search_results</title>
</head>
<body>
<table>
<p>学员选课信息</p>
<tr align="center" style="color:White;background-color:#3366FF;font-family:微軟正黑體,Tahoma,Arial,微軟雅黑體;font-size:14px;">
<th scope="col">employee.eid</th>
<th scope="col">employee.name</th>
<th scope="col">employee.dept_code</th>
<th scope="col">employee.gender</th>
<th scope="col">employee.on_board</th>
<th scope="col">employee.Range</th>
<th scope="col">employee.subject.Subject_id</th>
</tr>
{% for employee in employee_list %}
<tr align="center" valign="middle" style="color:Black;background-color:#EFF3FB;border-color:#E0E0E0;border-width:1px;border-style:solid;height:26px;">
<td>{
{ employee.eid }}</td>
<td>{
{ employee.name }}</td>
<td>{
{ employee.dept_code }}</td>
<td>{
{ employee.gender }}</td>
<td>{
{ employee.on_board }}</td>
<td>{
{ employee.Range }}</td>
<td>
{% for subject_item in employee.subject_set.all %}
{
{ subject_item.subject_name }}
{% endfor %}
</td>
</tr>
{% endfor %}
</table>
</body>
5. 插入链接
- info.html
<html>
<head>
<title>导航页</title>
</head>
<body>
<p><a href="/index/">index</a></p>
<p><a href="/myclass/search_form/">search_form</a></p>
</body>