day71_10_16多表断关联
---恢复内容开始---
本次环境:
配置settings
INSTALLED_APPS = [
# ...
'rest_framework',
] DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'dg_proj',
'USER': 'root',
'PASSWORD': '',
}
}
"""
任何__init__文件
import pymysql
pymysql.install_as_MySQLdb()
""" LANGUAGE_CODE = 'zh-hans'
TIME_ZONE = 'Asia/Shanghai'
USE_I18N = True
USE_L10N = True
USE_TZ = False MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
配置路由:
# 主
from django.conf.urls import url, include
from django.contrib import admin
from django.views.static import serve
from django.conf import settings
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^api/', include('api.urls')),
url(r'^media/(?P<path>.*)', serve, {'document_root': settings.MEDIA_ROOT}),
] # 子
from django.conf.urls import url
from . import views
urlpatterns = [ ]
一。基表。
通常,当有一些属性所有的表都会用到时,可以创建一个基表用来被其他表继承,其中有一个abstract = True,代表这个表不会再数据库中生成对应的表:
class BaseModel(models.Model):
is_delete = models.BooleanField(default=False)
create_time = models.DateTimeField(auto_now_add=True) # 设置 abstract = True 来声明基表,作为基表的Model不能在数据库中形成对应的表
class Meta:
abstract = True
二。断关联多表关系。
在表的设计中,如果出现环形的关联设计,这些表就永远不会被删除,所以可以通过逻辑上的关联实现表关联,而表中的关联不存在。
publish = models.ForeignKey(
to='Publish',
related_name='books',
db_constraint=False,
on_delete=models.DO_NOTHING,
)
设计表时,relate_name代表的就是查询该字段时的名字。
db_constraint表示这个外键是否有关联。
on_delete就是代表关联的表在被删除后的动作。
表设计:
"""
Book表:name、price、img、authors、publish、is_delete、create_time Publish表:name、address、is_delete、create_time Author表:name、age、is_delete、create_time AuthorDetail表:mobile, author、is_delete、create_time BaseModel基表
is_delete、create_time
上面四表继承基表,可以继承两个字段
"""
"""
1、外键位置:
一对多 - 外键放多的一方
一对一 - 从逻辑正反向考虑,如作者表与作者详情表,
作者删除级联删除详情,详情删除作者依旧存在,所以建议外键在详情表中
多对多 - 外键在关系表中 2、ORM正向方向连表查找:
正向:通过外键字段 eg: author_detial_obj.author
反向:通过related_name的值 eg:author_obj.detail
注:依赖代码见下方 3、连表操作关系:
1)作者删除,详情级联 - on_delete=models.CASCADE
2)作者删除,详情置空 - null=True, on_delete=models.SET_NULL
3)作者删除,详情重置 - default=0, on_delete=models.SET_DEFAULT
4)作者删除,详情不动 - on_delete=models.DO_NOTHING
注:拿作者与作者详情表举例 4、外键关联字段的参数 - 如何实现 断关联、目前表间操作关系、方向查询字段
i)作者详情表中的
author = models.OneToOneField(
to='Author',
related_name='detail',
db_constraint=False,
on_delete=models.CASCADE
) ii)图书表中的
publish = models.ForeignKey(
to='Publish',
related_name='books',
db_constraint=False,
on_delete=models.DO_NOTHING,
)
authors = models.ManyToManyField(
to='Author'
related_name='books',
db_constraint=False,
)
注:ManyToManyField不能设置on_delete,
OneToOneField、ForeignKey必须设置on_delete
(django1.x系统默认级联,但是django2.x必须手动明确)
"""
day71_10_16多表断关联的更多相关文章
- crf多表与基表系列化-自定义序列化深度表查询-断关联表关系-多表反序列化
学习表关系的序列化和反序列表查询之前,新建项目的准备工作及环境搭建的配置. 配置:settings.py INSTALLED_APPS = [ # ... 'rest_framework', ] DA ...
- drf序列化高级、自定义只读只写、序列化覆盖字段、二次封装Response、数据库查询优化(断关联)、十大接口、视图家族
目录 自定义只读 自定义只写 序列化覆盖字段 二次封装Response 数据库关系分析 断外键关联关系 ORM操作外键关系 ORM四种关联关系 基表 系列化类其他配置(了解) 十大接口 BaseSer ...
- mybatis 使用auto mapping原理实现表间关联
Auto mapping的示例 数据库中有一个person表,结构如下: mysql> desc person; +-------+-------------+------+-----+---- ...
- 【Mybatis】MyBatis之表的关联查询(五)
本章介绍Mybatis之表的关联查询 一对一关联 查询员工信息以及员工的部门信息 1.准备表employee员工表,department部门表 CREATE TABLE `employee` ( `i ...
- linq查询数值为null的问题以及数据表的关联计算问题
说明:下面实例都是我进行项目开发时的真实部分代码,毫无保留 一.数据表的关联计算 //把当前年度的分差计算出来,建立两个关联的数据表 try { using(TransactionScope scop ...
- 多张表进行关联查询---->删除某个数据的时候出现还有子记录的提示
多张表进行关联查询的时候,当某张表里面的一个字段在另外一张表有定义,就相当于一张表是另外一张表的子表:比如现在开发所遇到的一个问题: 这个是在删除sys_user表的里面的数据的时候出现的问题,因为s ...
- Mysql两张表的关联字段不一致
工作中遇到了一个问题,邮件系统群发失败,后来经过排查查找到了原因 原来是因为mysql中的两张表的关联字段竟然不一致, 表A mysql> desc rm_user_router;+------ ...
- MongoDB里做表间关联
MongoDB与关系型数据库的建模还是有许多不同,因为MongoDB支持内嵌对象和数组类型.MongoDB建模有两种方式,一种是内嵌(Embed),另一种是连接(Link).那么何时Embed何时Li ...
- Mongoose 多表(N个表)关联查询aggregate
Mongoose 多表(N个表)关联查询概述 需求:文章(article),文章分类(articlecate),用户(user)这三个表之间的关系,一篇文章对应文章分类表中的某个类型,对应着用户表中的 ...
随机推荐
- github.com/pkg/errors库学习
为了理解go error,进一步学习github.com/pkg/errors作的训练. http://www.shtml.net/article/content/tok/48369/id/37733 ...
- 201871010116-祁英红《面向对象程序设计(java)》第八周学习总结
项目 内容 <面向对象程序设计(java)> https://home.cnblogs.com/u/nwnu-daizh/ 这个作业的要求在哪里 https://www.cnblogs.c ...
- 【西北师大-2108Java】第五次作业成绩汇总
[西北师大-2108Java]第五次作业成绩汇总 作业题目 面向对象程序设计(JAVA) 第7周学习指导及要求 实验目的与要求 (1)掌握四种访问权限修饰符的使用特点: (2)掌握Object类的用途 ...
- BZOJ2591/LG3047 「USACO12FEB」Nearby Cows 换根树形DP
问题描述 BZOJ2591 LG3047 题解 换根树形DP. 设 \(opt[i][j]\) 代表 当 \(1\) 为根时,\(i\) 为根的子树中,到 \(i\) 的距离为 \(j\) 的权值和 ...
- 解决Fiddler在win7系统下的安全证书问题
如果电脑win7系统,一直解决不了Fiddler的证书安装问题,可以试试下面的办法. 在安装证书的时候一直遇到这个问题. 这是因为win7系统的在.net Framework4.0上面的bug引起的. ...
- 这样修改有哪些优缺点 wcf service via attribute setting vs config
客户要恢复数据,结果就是block在某个阶段,在server端log一圈下来,发现原来是client端出了问题,就是这个log: ERROR - Identity check failed for o ...
- c++用控制符控制输出格式
#include<iostream> #include<cstdio> #include<iomanip> using namespace std; int mai ...
- Python程序中的进程操作-开启多进程(multiprocess.process)
目录 一.multiprocess模块 二.multiprocess.process模块 三.process模块介绍 3.1 方法介绍 3.2 属性介绍 3.3 在windows中使用process模 ...
- solidity定长数组和动态数组
固定长度的数组 固定长度数组声明 直接在定义数组的时候声明固定长度数组的值: uint[5] fixedArr = [1,2,3,4,5]; 可通过数组的length属性来获得数组的长度,进而进行遍历 ...
- Python Turtle绘画初学编程——六芒星,浪形圈
老师上课说可以自学一下python中的绘图turtle,就自己初步学习了一下,做了两个简单的绘图——六芒星和浪形圈(其实我也不知道该叫它什么,就照样子编了个词