关系表介绍及使用

一对一关系

xx = models.OneToOneField(to='表名',to_field='字段名',on_delete=models.CASCADE)
#on_delete:删除时的一些级联效果,to_field可以不写,默认是关联到另一张表的主键,on_delete在1.x版本的django中不用写,默认是级联删除的,2.x版本的django要写.

增加数据

方式1

new_author_detail = models.AuthorDetail.objects.create(
birthday='1979',
telephone='138',
addr='black'
)
# 方式1
models.Author.objects.create(
name='王涛',
age=18,
#直接将对象赋值属性
authorDetail=new_author_detail
)

方式2

new_author_detail = models.AuthorDetail.objects.create(
birthday='1979',
telephone='138',
addr='black'
)
# 方式2
models.Author.objects.create(
name='王涛',
age=18,
authorDetail_id=new_author_detail.id
)

删除数据

表一外键关联到表二,表一删除,不影响表2,表2删除会影响表1

models.AuthorDetail.objects.get(id=2).delete()
models.Author.objects.get(id=3).delete()

更新数据

models.Author.objects.filter(id=5).update(
name='崔老师',
age=16,
authorDetail=models.AuthorDetail.objects.get(id=5),
authorDetail_id=4,
)

一对多关系

xx = models.ForeignKey(to='表名',to_field='字段名',on_delete=models.CASCADE)

增加数据

方式1

外键关联的直接赋值为某个对象即可

obj = models.Publish.objects.get(id=1)
models.Book.objects.create(
title='李帅',
publishDate='2019-07-22',
price=3,
publishs=obj
)

方式2

obj = models.Publish.objects.get(id=1)
models.Book.objects.create(
title='李帅test',
publishDate='2019-07-22',
price=3.5,
publishs_id=1 #可以是整型,也可以是对象的属性(id)
#publishs_id=obj.id
)

删除数据

models.Publish.objects.get(id=1).delete()
models.Book.objects.get(nid=1).delete()

更新数据

models.Book.objects.filter(pk=4).update(
title='B哥的往事2',
publishs=models.Publish.objects.get(id=3),
publishs_id=3, #注意级联关系 不能乱改
)

多对多关系

xx = models.ManyToManyField(to='另外一个表名') #这是自动创建第三表

添加数据

book_obj = models.Book.objects.get(nid=1)
book_obj.authors.add(*[1,2])

删除数据

book_obj = models.Book.objects.get(nid=6)
book_obj.authors.remove(6)#将某个特定的对象从被关联对象集合中去除。
book_obj.authors.remove(*[5,6])
book_obj.authors.clear() #情况与nid 6相关联的所有
book_obj.authors.add(*[1,])#添加表记录
book_obj.authors.set('1')#先清空然后在设置
book_obj.authors.set(['5','6']) #删除然后更新

示例

from django.db import models

# Create your models here.

from django.db import models

# Create your models here.
#作者表
class Author(models.Model): #比较常用的信息放到这个表里面
name=models.CharField( max_length=32)
age=models.IntegerField()
# authorDetail=models.OneToOneField(to="AuthorDetail",to_field="nid",on_delete=models.CASCADE)
authorDetail=models.OneToOneField(to='AuthorDetail') #一对一到AuthorDetail表 生成为表字段之后,会自动变为authorDetail_id这样有一个名称 # 外键字段 -- 外键字段名_id # foreign+unique def __str__(self):
return self.name #作者详细信息表
class AuthorDetail(models.Model):
birthday=models.DateField()
# telephone=models.BigIntegerField()
telephone=models.CharField(max_length=32)
addr=models.CharField( max_length=64)
def __str__(self):
return self.addr #出版社表 和 书籍表 是 一对多的关系
class Publish(models.Model):
name=models.CharField( max_length=32)
city=models.CharField( max_length=32)
email=models.EmailField() #charfield -- asdfasdf
def __str__(self):
return self.name #书籍表
class Book(models.Model):
nid = models.AutoField(primary_key=True)
title = models.CharField( max_length=32)
publishDate=models.DateField()
price=models.DecimalField(max_digits=5,decimal_places=2) #decimal(16,2)
publishs=models.ForeignKey(to="Publish")
authors=models.ManyToManyField(to='Author',) def __str__(self):
return self.title

四、Django学习之关系表介绍及使用的更多相关文章

  1. Django学习-21-表关系参数

    一对多关系 ForeignKey(ForeignObject) # ForeignObject(RelatedField) to, # 要进行关联的表名 to_field=None, # 要关联的表中 ...

  2. Django学习总结②----关系运算与F,Q关系

    关联mysql步骤: 第一步:下载pymysql:pip install pymysql 第二步:在工程目录下的init文件下,将pymysql引入 import pymysql pymysql.in ...

  3. Django学习之Form表单

    一.Form介绍 普通方式手写注册功能 使用form组件实现注册功能 二.Form那些事儿 1.常用字段与插件 initial error_messages password radioSelect ...

  4. C# WinfForm 控件之dev报表 XtraReport (四) 动态绑定主从关系表

    一般的单据都是由主从关系的,比如部门与人员.单据表头与表身.仓库与存货.分类与档案等等 所以主从关系是报表用的最多的 1.准备数据库 简单方便 --主表 create table RdRecord ( ...

  5. django学习-21.优化表数据的标题展示

    目录结构 1.前言 2.表数据的标题默认展示的数据格式是[模型类名 object(主键名)]的相关信息 3.优化表数据的标题展示的数据格式是[改成我们想要展示的数据格式]的相关完整操作步骤 3.1.第 ...

  6. Django学习笔记之表单验证

    表单概述 HTML中的表单 单纯从前端的html来说,表单是用来提交数据给服务器的,不管后台的服务器用的是Django还是PHP语言还是其他语言.只要把input标签放在form标签中,然后再添加一个 ...

  7. 三、Django学习之单表查询接口

    查询接口 all() 查询所有结果,结果是queryset类型 filter(**kwargs) and条件关系:参数用逗号分割表示and关系 models.Student.objects.filte ...

  8. Django学习之十四:Django ORM继承关系

    目录 Django ORM继承关系 1. SINGLE_TABLE(django好像不支持) 2. TABLE_PER_CLASS 3. JOINED 4. 代理继承 Django ORM继承关系 参 ...

  9. Django学习笔记(6)——Form表单

    知识储备:HTML表单form学习 表单,在前端页面中属于最常见的一个东西了.基本上网站信息的提交都用到了表单,所以下面来学习Django中优雅的表单系统:Form 表单的主要作用是在网页上提供一个图 ...

随机推荐

  1. DOCKER学习_002:Docker的容器管理

    一 Docker的基本信息 前面已经安装了Docker,现在看一下已安装Docker的安装环境以及其他信息 1.1 系统环境 [root@docker-server3 ~]# uname -r -.e ...

  2. blackarch 安装指南

    建议直接  www.blackangle.cn/BlackArchGuide.htm v\:* {behavior:url(#default#VML);} o\:* {behavior:url(#de ...

  3. jenkins邮件通知html魔板

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  4. $Noip2018/Luogu5019/Luogu1969$ 铺设道路

    $Luogu$ 去年$Noip$的时候我并没有做过原题,然后考场上也没有想出正解,就写了个优化了一点的暴力:树状数组+差分,然后就$A$了$ovo$. $Sol$ 只要$O(N)$扫一遍,只要当前值比 ...

  5. docker练习-容器和服务

    使用定义容器 Dockerfile Dockerfile定义容器内环境中发生的事情.对网络接口和磁盘驱动器等资源的访问在此环境中进行虚拟化,该环境与系统的其他部分隔离,因此您需要将端口映射到外部世界, ...

  6. docker操作

    Redis docker run -itd --name myredis -v /dockerdata/redis/config/redis.conf:/etc/redis/redis.conf  - ...

  7. Huffman树及其编码(STL array实现)

    这篇随笔主要是Huffman编码,构建哈夫曼树有各种各样的实现方法,如优先队列,数组构成的树等,但本质都是堆. 这里我用数组来存储数据,以堆的思想来构建一个哈弗曼树,并存入vector中,进而实现哈夫 ...

  8. C++ | C++ 概览 基础知识 | 01

    一.基本概念 1.1 类型.变量和算术运算 1.2 常量 1.3 检验和循环 1.4 指针,数组和循环 二.用户自定义类型 2.1 结构 2.2 类 2.3 枚举 三.模块化 3.1 分离编译 3.2 ...

  9. hexo博客零基础搭建系列(一)

    文章目录 其他搭建 1.简介 2.安装Node和Git 3.安装Hexo 4.Hexo的目录结构 5.我的版本 其他搭建 不好意思,下面的链接都是CSDN的链接,如果要在博客园看,请点我的分类查看.因 ...

  10. wannafly camp day1

    题目描述: 恬恬的生日临近了.宇扬给她准备了一个大 蛋糕. 正如往常一样,宇扬在蛋糕上插了nnn支蜡烛,并把蛋糕分为mmm个区域.因为某种原因,他必须把第iii根蜡烛插在第aia\_iai​个区域或第 ...