今天的Django教训汇总:建立查询页面-20210330

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>

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/m0_46629123/article/details/115323426
今日推荐