实现一对多表查询功能

项目代码:

models.py

from django.db import models

# Create your models here.

class Classes(models.Model):
"""
班级表,男
"""
titile = models.CharField(max_length=32)
m = models.ManyToManyField("Teachers") class Teachers(models.Model):
"""
老师表,女
"""
name = models.CharField (max_length=32) """
cid_id tid_id
1 1
1 2
6 1
1000 1000
"""
# class C2T(models.Model):
# cid = models.ForeignKey(Classes)
# tid = models.ForeignKey(Teachers) class Student(models.Model):
username = models.CharField(max_length=32)
age = models.IntegerField()
gender = models.BooleanField()
cs = models.ForeignKey(Classes)

urls.py

"""django_one URL Configuration

The `urlpatterns` list routes URLs to views. For more information please see:
https://docs.djangoproject.com/en/1.10/topics/http/urls/
Examples:
Function views
1. Add an import: from my_app import views
2. Add a URL to urlpatterns: url(r'^$', views.home, name='home')
Class-based views
1. Add an import: from other_app.views import Home
2. Add a URL to urlpatterns: url(r'^$', Home.as_view(), name='home')
Including another URLconf
1. Import the include() function: from django.conf.urls import url, include
2. Add a URL to urlpatterns: url(r'^blog/', include('blog.urls'))
"""
from django.conf.urls import url
from django.contrib import admin
from app01.views import classes
from app01.views import students urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^get_classes.html$', classes.get_classes),
url(r'^add_classes.html$', classes.add_classes),
url(r'^del_classes.html$', classes.del_classes),
url(r'^edit_classes.html$', classes.edit_classes), url(r'^get_students.html$', students.get_students),
url(r'^add_students.html$', students.add_students),
url(r'^del_students.html$', students.del_students),
url(r'^edit_students.html$', students.edit_students), ]

students.py

from django.shortcuts import render
from django.shortcuts import redirect
from app01 import models def get_students(request):
stu_list = models.Student.objects.all()
# for i in stu_list:
# print(i.id,i.username,i.age,i.cs.id,i.cs.titile)
return render(request,'get_students.html',{'stu_list':stu_list}) def add_students(request):
if request.method == 'GET':
cs_list = models.Classes.objects.all()
return render(request, 'add_students.html', {'cs_list': cs_list}) elif request.method == 'POST':
u = request.POST.get('username')
a = request.POST.get('age')
g = request.POST.get('gender')
c = request.POST.get('cs')
models.Student.objects.create(
username=u,
age=a,
gender=g,
cs_id=c,
)
return redirect('/get_students.html') def del_students(request):
nid = request.GET.get('nid')
models.Student.objects.filter(id=nid).delete()
return redirect('get_students.html') def edit_students(request):
if request.method == "GET":
nid = request.GET.get('nid')
obj = models.Student.objects.filter(id=nid).first()
cls_list = models.Classes.objects.all() return render(request, 'edit_students.html',{'obj': obj,'cls_list': cls_list}) elif request.method == "POST":
u = request.GET.get('username')
a = request.GET.get('age')
g = request.GET.get('gender')
c = request.GET.get('cs')
models.Student.objects.filter(nid=id).update(
username=u,
age=a,
gender=g,
cs_id=c,
)
return redirect('/get_students.html')

get_students.html

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<div>
<a href="/add_students.html">添加</a>
</div>
<div>
<table border="">
<thead>
<tr>
<th>ID</th>
<th>姓名</th>
<th>年龄</th>
<th>性别</th>
<th>班级</th>
<th>操作</th>
</tr>
</thead>
<tbody>
{% for row in stu_list %}
<tr>
<td>{{ row.id }}</td>
<td>{{ row.username }}</td>
<td>{{ row.age }}</td>
{% if row.gender %}
<td>男</td>
{% else %}
<td>女</td>
{% endif %}
<td>{{ row.cs.titile }}</td>
<td>
<a href="/del_students.html?nid={{ row.id }}">删除</a>
|
<a href="/edit_students.html?nid={{ row.id }}">编辑</a>
</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
</body>
</html>

add_students.html

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h3>添加用户</h3>
<form action="/add_students.html" method="POST">
{% csrf_token %}
<p><input type="text" name="username" placeholder="用户名" /></p>
<p><input type="text" name="age" placeholder="年龄" /></p>
<p>
男:<input type="radio" name="gender" value="" />
女:<input type="radio" name="gender" value="" />
</p>
<p>
<select name="cs">
{% for foo in cs_list %}
<option value="{{ foo.id }}">{{ foo.titile }}</option>
{% endfor %}
</select>
</p>
<input type="submit" value="提交">
</form>
</body>
</html>

edit_students.html

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form action="/edit_students.html" method="POST">
{% csrf_token %}
<p><input type="text" name="username" placeholder="用户名" value="{{ obj.username }}"/></p>
<p><input type="text" name="age" placeholder="年龄" value="{{ obj.age }}"/></p>
<p>
{% if obj.gender %}
男:<input type="radio" name="gender" value="" checked/>
女:<input type="radio" name="gender" value=""/>
{% else %}
男:<input type="radio" name="gender" value=""/>
女:<input type="radio" name="gender" value="" checked/>
{% endif %}
</p>
<p>
<select name="cs">
{% for foo in cls_list %}
{% if obj.cs_id == foo.id %}
<option value="{{ foo.id }}" selected>{{ foo.titile }}</option>
{% else %}
<option value="{{ foo.id }}">{{ foo.titile }}</option>
{% endif %}
{% endfor %}
{
</select>
</p>
<input type="submit" value="提交">
</form>
</body>
</html>

django一对多 增 删 改 查的更多相关文章

  1. django 多对多 增 删 改 查

      一.通过url方式实现多对多的:增加,删除,编辑 代码目录: urls.py 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 ...

  2. django ajax增 删 改 查

    具于django ajax实现增 删 改 查功能 代码示例: 代码: urls.py from django.conf.urls import url from django.contrib impo ...

  3. 好用的SQL TVP~~独家赠送[增-删-改-查]的例子

    以前总是追求新东西,发现基础才是最重要的,今年主要的目标是精通SQL查询和SQL性能优化.  本系列主要是针对T-SQL的总结. [T-SQL基础]01.单表查询-几道sql查询题 [T-SQL基础] ...

  4. iOS FMDB的使用(增,删,改,查,sqlite存取图片)

    iOS FMDB的使用(增,删,改,查,sqlite存取图片) 在上一篇博客我对sqlite的基本使用进行了详细介绍... 但是在实际开发中原生使用的频率是很少的... 这篇博客我将会较全面的介绍FM ...

  5. iOS sqlite3 的基本使用(增 删 改 查)

    iOS sqlite3 的基本使用(增 删 改 查) 这篇博客不会讲述太多sql语言,目的重在实现sqlite3的一些基本操作. 例:增 删 改 查 如果想了解更多的sql语言可以利用强大的互联网. ...

  6. ADO.NET 增 删 改 查

    ADO.NET:(数据访问技术)就是将C#和MSSQL连接起来的一个纽带 可以通过ADO.NET将内存中的临时数据写入到数据库中 也可以将数据库中的数据提取到内存中供程序调用 ADO.NET所有数据访 ...

  7. MVC EF 增 删 改 查

    using System;using System.Collections.Generic;using System.Linq;using System.Web;//using System.Data ...

  8. python基础中的四大天王-增-删-改-查

    列表-list-[] 输入内存储存容器 发生改变通常直接变化,让我们看看下面列子 增---默认在最后添加 #append()--括号中可以是数字,可以是字符串,可以是元祖,可以是集合,可以是字典 #l ...

  9. Django(十)模型:django模型类对数据库的:增/删/改/查、自关联、管理器、元选项(指定表名)

    一.插入.更新和删除 调用一个模型类对象的save方法的时候就可以实现对模型类对应数据表的插入和更新. 调用一个模型类对象的delete方法的时候就可以实现对模型类对应数据表数据的删除. 二.自关联 ...

随机推荐

  1. thinkphp5.0 配置格式

    ThinkPHP支持多种格式的配置格式,但最终都是解析为PHP数组的方式. PHP数组定义 返回PHP数组的方式是默认的配置定义格式,例如: //项目配置文件 return [ // 默认模块名 'd ...

  2. (15) go 方法

  3. Python之路【第五篇】: 函数、闭包、装饰器、迭代器、生成器

    目录 函数补充进阶 函数对象 函数的嵌套 名称空间与作用域 闭包函数 函数之装饰器 函数之可迭代对象 函数之迭代器 函数之生成器 面向过程的程序设计思想 一.函数进阶之函数对象 1. 函数对象 秉承着 ...

  4. Docker应用系列(四)| 部署java应用

    本示例基于Centos 7,假设目前使用的账号为release,拥有sudo权限. 由于Docker官方镜像下载较慢,可以开启阿里云的Docker镜像下载加速器,可参考此文进行配置. 主机上服务安装步 ...

  5. Linux下安装scapy-python3

    安装scapy # pip3 install scapy-python3 # yum install libffi-devel # pip3 install cryptography 新建scapy软 ...

  6. Python开发基础-Day32 进程间通信、进程池、协程

    进程间通信 进程彼此之间互相隔离,要实现进程间通信(IPC),multiprocessing模块支持两种形式:队列和管道,这两种方式都是使用消息传递的. 进程队列queue 不同于线程queue,进程 ...

  7. 搭建samba 共享openstack开发环境

    centos7.2 openstack环境为allinone 模式,这样跑代码好处理 安装smb [root@controller ~]# yum install -y samba samba-cli ...

  8. RxJava 机制

    韩梦飞沙  韩亚飞  313134555@qq.com  yue31313  han_meng_fei_sha rxjava 是  以 响应式 编程思想   编程的 java类库

  9. PHP 笔记——PDO操作数据库

    一.简介 ​ PHP 5.1可使用轻量级的统一接口 PDO(PHP Data Object,PHP数据对象)来访问各种常见的数据库.而使用PDO只需要指定不同的 DSN(数据源名称)即可访问不同的数据 ...

  10. [HNOI2006]最短母串问题 --- AC自动机 + 隐式图搜索

    [HNOI2006]最短母串问题 题目描述: 给定n个字符串(S1,S2.....,Sn),要求找到一个最短的字符串T,使得这n个字符串(S1,S2,......,Sn)都是T的子串. 输入格式: 第 ...