zoukankan      html  css  js  c++  java
  • django 下连表操作之一对多

    前后台数据交互方式

    在前后台交互的时候,当我们使用模态对话框时,后台数据处理完后涉及到数据传输时必须要使用json格式的数据。

    第一种数据交互方式:

    后台处理数据给前台返回处理结果:res = {'code':1000,'data': '数据处理完成‘}

    通过 来发送,这样发送过去的数据自动会转成字符串发送过去,并且不需要我们在手动转回字典格式

     return JsonResponse(res)

    前台在处理完数据后,成功就可以使用下面的代码来刷新当前页面

    window.location.reload()

    第二种交互方式:

    手动叫要传输的数据转为字符串,前台收到以后要手动转回字典格式

    return HttpResponse(json.dumps(res))

    前台在处理好数据后,可以选择刷新当前页面,也可以返回跳转前页面

    widnow.location.href = '/classes/';
                            window.location.reload();  # 刷新当前页面

    表格数据一对多

    操作有外键关联,对应关系为一对多的表格与操作单表时不同,需要考虑的点更多,细节上有许多要把控的点。

    以添加为例,在添加数据时我们需要考虑外键的存在,外键就代表了要和另外一张表取得关联,本次操作的学生列表,与班级列表有关联,外键设置的是班级列表的id,所以当我们增加学生列表中的学生信息时,不仅要增加学生姓名,还要选择班级id,这里可以使用先查找班级列表得到班级的id和班级名称,这里得到得到班级列表是通过我们在前台html页面中,通过点击a标签向

    后台发起get请求,a标签发起的请求为get请求

    <a href="/add_student/">添加学生按钮</a>

    后台得到请求后,通过pymysql得到数据后,用模板渲染将数据渲染到页面上

     sql = 'select * from classes;'
            cla = py.my_pymysql()
            classes = cla.get_all(sql)
            return render(request,'add_student.html',{'classes':classes})

    因为学生列表中的外键是班级表的id所以我们可以在前台通过班级名得到班级id 班级在页面展示选择

    使用select形式的下拉框,将value设置成id 文本设置为班级名。

    <form action="/add_student/" method="post">
        添加学生姓名: <input type="text" name="studentname">
            <select name="class_id" id="">
             {% for item in classes %} }
                <option value="{{ item.id }}">{{ item.name }}</option><br>
             {% endfor %}
            </select>
    
        <input type="submit" value="提交">

    数据发送到后台后通过pymysql操作列表并将students网页通过重定向返回students页面。

    def add_student(request):
        if request.method == 'GET':
            sql = 'select * from classes;'
            cla = py.my_pymysql()
            classes = cla.get_all(sql)
            return render(request,'add_student.html',{'classes':classes})
        else:
            studentname = request.POST.get('studentname')
            class_id = request.POST.get('class_id')
            print(studentname,class_id)
            sql = 'insert into students(name,class_id) values (%s,%s)'
            stu = py.my_pymysql()
            stu.add(sql,studentname,class_id)
            return redirect('/students/')

    更新数据

    更新数据时我们要得到表中我们要修改的原数据值,这里我们已更改班级为例,如果我们想要

    定位到我们原来的班级名称可以通过一个if判断来实现;

    <form action="/up_student/" method="post">
        <input type="hidden" name="stuid" value="{{ student.sid }}">
        学生姓名: <input type="text" name="stuname" value="{{ student.sname }}" > <br>
        选择班级:
        <select name="classid" id="">
            {% for item in classes %}
                {% if item.id == student.cid %}
                    <option value="{{ item.id }}" selected>{{ item.name }}</option>
                {%else%}
                     <option value="{{ item.id }}" >{{ item.name }}</option>
                {% endif %}
            {% endfor %}
        </select>
        <input type="submit"  value="提交">
    </form>
  • 相关阅读:
    QQ分享 QQ空间分享 API链接:
    一起谈.NET技术,C# 中奇妙的函数联接序列的五种简单方法 狼人:
    一起谈.NET技术,.NET简谈面向接口编程 狼人:
    一起谈.NET技术,用C#实现HTTP协议下的多线程文件传输 狼人:
    一起谈.NET技术,改善代码设计 —— 简化函数调用(Making Method Calls Simpler) 狼人:
    一起谈.NET技术,改善代码设计 —— 处理概括关系(Dealing with Generalization) 狼人:
    一起谈.NET技术,页面片段缓存(二) 狼人:
    一起谈.NET技术,改善代码设计 —— 简化条件表达式(Simplifying Conditional Expressions) 狼人:
    一起谈.NET技术,回顾.NET Remoting分布式开发 狼人:
    一起谈.NET技术,改善代码设计 —— 优化物件之间的特性(Moving Features Between Objects) 狼人:
  • 原文地址:https://www.cnblogs.com/1624413646hxy/p/11173209.html
Copyright © 2011-2022 走看看