django 下连表操作之一对多

时间:2021-04-20 11:58:18

前后台数据交互方式

在前后台交互的时候,当我们使用模态对话框时,后台数据处理完后涉及到数据传输时必须要使用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>