第二篇-Django建立数据库各表之间的联系(中)
上篇中已经建立了两个table,Book和Publish。这篇介绍如何用python增删改查数据库中的数据。
在views.py中创建一个index函数
from django.shortcuts import render # Create your views here.
from app01.models import * def index(request):
return render(request,"index.html")
返回一个index.html页面。urls.py中也要加入相应的函数。
from django.contrib import admin
from django.urls import path
from app01 import views urlpatterns = [
path('admin/', admin.site.urls),
path('index/', views.index),
]
写一个index.html页面
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
.head{
line-height: 40px;
background-color: green;
color: white;
text-align: center;
}
</style>
</head>
<body> <div class="outer">
<div class="head">标题</div>
<h1>一对多</h1>
<div class="content">
<a href="/addbook/">添加书籍</a>
<a href="/update/">修改书籍</a>
<a href="/delete/">删除书籍</a>
<a href="/select/">查询书籍</a>
</div>
<hr>
<div class="queryResult">
{% for book in book_list %}
<div>
<p>{{ book.name }} {{ book.author }} {{ book.price }}</p>
</div>
{% endfor %}
</div>
</div> </body>
</html>
由于html中点击添加书籍,修改书籍,删除书籍以及查询书籍会跳到不同的链接,所以在urls.py里面要添加相应链接
urlpatterns = [
path('admin/', admin.site.urls),
path('index/', views.index),
path('addbook/', views.addbook),
path('update/', views.update),
path('delete/', views.delete),
path('select/', views.select),
]
同样,在views.py中要添加相应函数,先写一个addbook的函数进行测试。
from django.shortcuts import render,HttpResponse # Create your views here.
from app01.models import * def index(request):
return render(request,"index.html") def addbook(request):
Book.objects.create(name="linux运维",price=77,pub_date="2018-11-2",publish_id=2)
return HttpResponse("添加成功") def update():pass def delete():pass def select():pass
然后可以运行试试,在命令行窗口Terminal中使用命令:
python manage.py runserver 8888
然后在浏览器地址栏输入http://127.0.0.1:8888/index/

得到此页面,由于我们已经在views.py中写了addbook的函数,所以我们可以点击添加书籍,看看有没有把书籍添加进去。会跳进addbook界面。

我们现在在去数据库中查看,会发现已经添加了一行信息进去

id那一栏是自动按照自增一的顺序添加的,由于第一次添加数据时,由于没有建立publish表,导致外键不能添加报错。所以id=1已经被使用了,后来建立的id是从2开始的。可以看到linux运维这一栏已经被添加成功了。
注意,之前添加外键那一栏的时候是直接用 publish_id添加的,如果想用publish添加的话,需要用对象添加进去。
def addbook(request):
# Book.objects.create(name="linux运维",price=77,pub_date="2018-11-2",publish_id=2) publish_obj=Publish.objects.filter(name="人民出版社")[0]
Book.objects.create(name="GO",price=23,pub_date="2018-10-2",publish=publish_obj)
return HttpResponse("添加成功")
刷新http://127.0.0.1:8888/addbook/,可以看见GO那一栏也被添加进去了。
第二篇-Django建立数据库各表之间的联系(中)的更多相关文章
- 第一篇-Django建立数据库各表之间的联系(上)
多表操作(一对多) 遇到的问题: 执行python manage.py makemigrations后报如下错误 TypeError: __init__() missing 1 required po ...
- 第三篇-Django建立数据库各表之间的联系(下)
中篇介绍的是添加,下篇主要介绍查询 通过一个Book表的书的信息查询Publish表中出版社的信息 def addbook(request): # Book.objects.create(name=& ...
- Kettle 实现mysql数据库不同表之间数据同步——实验过程
下面是试验的主要步骤: 在上一篇文章中LZ已经介绍了,实验的环境和实验目的. 在本篇文章中主要介绍侧重于对Kettle ETL的相应使用方法, 在这里LZ需要说明一下,LZ成为了避免涉及索引和表连接等 ...
- sql server DDL语句 建立数据库 定义表 修改字段等
一.数据库:1.建立数据库 create database 数据库名;use 数据库名; create database exp1;use exp1; mysql同样 2.删除数据库 drop dat ...
- day1_安装及建立数据库和表
#第一份数据库及表create database library; use library; create table book( id int primary key, book_name char ...
- 第二篇 -- Django写一个接口并用Jmeter进行测试
第一节学习了Jmeter的下载和安装,那么第二节就来看看具体怎么使用. 本篇介绍的是使用Jmeter进行http接口测试,那么接口程序使用Django开发的一个小接口. 一.Django编写接口 这一 ...
- 将PostgreSQL数据库的表导入到elasticsearch中
1.查看PostgreSQL表结构和数据信息 edbstore=# \d customers Table "edbstore.customers" Column | Type | ...
- 用Rational Rose来建立数据库表
这里以MS SQL Server2000中已有的一个Northwind库为例,我们命名新的数据库名为NorthwindRose:我们只挑其中的两个表Customers和Employees做示例,另外我 ...
- mysql数据库去重语句和不同表之间列的复制语句
1.去重语句:DELETE FROM `v_klg_item` WHERE id NOT IN (SELECT * FROM (SELECT MAX(id) FROM `v_klg_item` GRO ...
随机推荐
- Java多线程2:线程的使用及其生命周期
一.线程的使用方式 1.继承Thread类,重写父类的run()方法 优点:实现简单,只需实例化继承类的实例,即可使用线程 缺点:扩展性不足,Java是单继承的语言,如果一个类已经继承了其他类,就无法 ...
- 一、Dev
一.获取选中的表格 // MessageBox.Show(gridview_Parent.GetFocusedDataRow()["series"].ToString());//获 ...
- Python——进程通信之间数据共享
from multiprocessing import Manager,Process,Lock def main(dic,lock): lock.acquire() dic['count'] -= ...
- cuda编程-并行规约
利用shared memory计算,并避免bank conflict:通过每个block内部规约,然后再把所有block的计算结果在CPU端累加 代码: #include <cuda_runti ...
- C语言学习IDE和基本程序结构
任何一门语言的学习,首先要有一个编辑器或集成开发工具IDE, 要不然代码都不知道写到什么地方.对于我这种小白来说,安装个IDE是最好不过的,因为C 语言也是编译语言,写完代码之后,要先编译才能运行,而 ...
- vuex2.0 基本使用(4) --- modules
vue 使用的是单一状态树对整个应用的状态进行管理,也就是说,应用中的所有状态都放到store中,如果是一个大型应用,状态非常多, store 就会非常庞大,不太好管理.这时vuex 提供了另外一种方 ...
- Spring boot多线程
1.配置线程配置类 package test; import java.util.concurrent.Executor; import org.springframework.aop.interce ...
- Mysql 查看连接数,状态 最大并发数(赞)
Mysql 查看连接数,状态 最大并发数(赞) -- show variables like '%max_connections%'; 查看最大连接数 set global max_connect ...
- Civil 3D 二次开发 创建AutoCAD对象—— 00 ——
不积跬步无以至千里,不积小流无以成江海.虽然创建一条直线.添加一个图层这样的小程序没有什么实际意义(内部命令很简单就可以完成),但对于初学二次开发的您来说,这可是一大步,这一步跨出去,您就跨进了二次开 ...
- IntelliJ IDEA通过Tomcat启动项目过程分析
Tomcat部署项目的多种方式 Tomcat安装目录:${TOMCAT_HOME} 1.常规的webapps下直接部署到${TOMCAT_HOME}/webapps下 2.利用控制台进行部署 3.外部 ...