上篇中已经建立了两个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建立数据库各表之间的联系(中)的更多相关文章

  1. 第一篇-Django建立数据库各表之间的联系(上)

    多表操作(一对多) 遇到的问题: 执行python manage.py makemigrations后报如下错误 TypeError: __init__() missing 1 required po ...

  2. 第三篇-Django建立数据库各表之间的联系(下)

    中篇介绍的是添加,下篇主要介绍查询 通过一个Book表的书的信息查询Publish表中出版社的信息 def addbook(request): # Book.objects.create(name=& ...

  3. Kettle 实现mysql数据库不同表之间数据同步——实验过程

    下面是试验的主要步骤: 在上一篇文章中LZ已经介绍了,实验的环境和实验目的. 在本篇文章中主要介绍侧重于对Kettle ETL的相应使用方法, 在这里LZ需要说明一下,LZ成为了避免涉及索引和表连接等 ...

  4. sql server DDL语句 建立数据库 定义表 修改字段等

    一.数据库:1.建立数据库 create database 数据库名;use 数据库名; create database exp1;use exp1; mysql同样 2.删除数据库 drop dat ...

  5. day1_安装及建立数据库和表

    #第一份数据库及表create database library; use library; create table book( id int primary key, book_name char ...

  6. 第二篇 -- Django写一个接口并用Jmeter进行测试

    第一节学习了Jmeter的下载和安装,那么第二节就来看看具体怎么使用. 本篇介绍的是使用Jmeter进行http接口测试,那么接口程序使用Django开发的一个小接口. 一.Django编写接口 这一 ...

  7. 将PostgreSQL数据库的表导入到elasticsearch中

    1.查看PostgreSQL表结构和数据信息 edbstore=# \d customers Table "edbstore.customers" Column | Type | ...

  8. 用Rational Rose来建立数据库表

    这里以MS SQL Server2000中已有的一个Northwind库为例,我们命名新的数据库名为NorthwindRose:我们只挑其中的两个表Customers和Employees做示例,另外我 ...

  9. mysql数据库去重语句和不同表之间列的复制语句

    1.去重语句:DELETE FROM `v_klg_item` WHERE id NOT IN (SELECT * FROM (SELECT MAX(id) FROM `v_klg_item` GRO ...

随机推荐

  1. Android——MaterialDesign之四 FloatingActionButton、Snackbar、CoordinaterLayout

    FloatingActionButton 悬浮按钮,默认colorAccent来作为按钮的颜色 <android.support.design.widget.FloatingActionButt ...

  2. 区分Python中的可变对象和不可变对象

    参考: https://www.cnblogs.com/sun-haiyu/p/7096918.html """不过注意函数传参既不是传值也不是传引用,正确的叫法是传对象 ...

  3. RocketMQ消息队列安装

    一.官方安装文档 http://rocketmq.apache.org/docs/quick-start/ 下载地址 https://github.com/apache/rocketmq/releas ...

  4. Java多线程之定时任务(Timer)

    package org.study2.javabase.ThreadsDemo.schedule; import java.util.Date; import java.util.Timer; imp ...

  5. Linux上面部署java项目

    最近做项目迁移,费了很大周折.总算顺利迁移了.其实一直以为搞不懂单用tomcat是怎么发布项目的.但还是得硬着头皮做. 不过这个是在搭建测试服务器的时候弄的.开始我就直接把程序包丢tomcat里面也能 ...

  6. 学习 Spring (十五) Advisor

    Spring入门篇 学习笔记 advisor 就像一个小的自包含的方面,只有一个 advice 切面自身通过一个 bean 表示,并且必须实现某个 advice 接口,同时 advisor 也可以很好 ...

  7. javascript中关于value的一个小知识点(value既是属性也是变量)

    今天在学习input的value值时,发现这么一个小知识点,以前理解不太透彻 [1]以下这种情况是常见情况,会弹出“测试内容” <input type="button" va ...

  8. Nginx 针对建立TCP连接优化

    L:124 sysctl -a | grep file-max //通过命令查看系统最大句柄数 [root@3 ~]# sysctl -a | grep file-max fs.file-max = ...

  9. puppet的常用语法

    检查语法错误 puppet parser validate xx.pp 在客户端测试但是不应用 puppet agent --test --noop 基于安全的考虑,使用预签名证书 puppet ce ...

  10. Typecho——数据库无法连接问题

    报错 对不起,无法连接数据库,请先检查数据库配置再继续进行安装 解决方案 创建数据库 reate database databaseName; 远程权限 开启远程权限 GRANT ALL PRIVIL ...