关系表介绍及使用

一对一关系

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. Java动态代理 ----- jdk代理与cglib代理

    1.jdk代理 针对接口进行代理,接口可以没有方法, InvocationHandler会拦截所有方法,不过好像意义不大....只能执行Object类的方法,执行结果有点奇怪... package t ...

  2. C# 为什么说事件是一种特殊的委托

    很多人说C#的事件是一种特殊的委托,其实并不是,这是对事件的一种误解 C#  事件模型的五个组成部分 1.事件的拥有者 2.事件成员(事件的本身) 3.事件响应者 4.事件处理器:本质上是一种回调方法 ...

  3. cs服务器搭建(cobaltstrike)

    linux服务器中安装 1.因为cs这个工具需要用到Java环境,新装的linux系统没有Java环境,所以这里先装一下java环境 yum install -y java-1.8.0-openjdk ...

  4. CF1272E. Nearest Opposite Parity 题解 广度优先搜索

    题目链接:http://codeforces.com/contest/1272/problem/E 题目大意: 有一个长度为n的数组 \(a\) ,数组坐标从 \(1\) 到 \(n\) . 假设你现 ...

  5. HDU4352 XHXJ's LIS 题解 数位DP

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4352 题目大意: 求区间 \([L,R]\) 范围内最长上升子序列(Longest increasin ...

  6. NPOI读取Excel的数据

    首先是给项目安装NPOI.DLL :Install-Package NPOI -Version 2.4.1 HttpPostedFile upLoadPostFile = FileUpload1.Po ...

  7. 幽灵java进程引起的: FATAL ERROR in native method

    FATAL ERROR in native method: JDWP No transports initialized, jvmtiError=AGENT_ERROR_TRANSPORT_INIT( ...

  8. 归一化 (Normalization)、标准化 (Standardization)和中心化/零均值化 (Zero-centered)

    博主学习的源头,感谢!https://www.jianshu.com/p/95a8f035c86c 归一化 (Normalization).标准化 (Standardization)和中心化/零均值化 ...

  9. Jenkins-k8s-helm-harbor-githab-mysql-nfs微服务发布平台实战

    基于 K8S 构建 Jenkins 微服务发布平台 实现汇总: 发布流程设计讲解 准备基础环境 K8s环境(部署Ingress Controller,CoreDNS,Calico/Flannel) 部 ...

  10. xlwings excel(四)

    前言 当年看<别怕,Excel VBA其实很简单>相见恨晚,看了第一版电子版之后,买了纸质版,然后将其送人.而后,发现出了第二版,买之收藏.之后,发现Python这一编程语言,简直是逆天, ...