Django--models连表构建
需求
models多表(一对多、多对多、一对一)的构建
速查
1、一对多
1
2
3
|
class User(models.Model): name = models.CharField(max_length = 10 ) gender = models.ForeignKey(外键表名, |
2、多对多
1
2
3
|
class User(models.Model): name = models.CharField(max_length = 10 ) hobby = models.ManyToManyField(Hobby) |
3、一对一
1
2
3
|
class User(models.Model): name = models.CharField(max_length = 10 ) salary = models.OneToOneField(Salary,to_field = "name" ) |
知识点
1、连表结构
一对多:models.ForeignKey(其他表),A表的一个字段对应B表的多个字段;
多对多:models.ManyToManyField(其他表),A表中的一个字段对应B表中的多行(自动创建一关系表);
一对一:models.OneToOneField(其他表),
2、应用场景
一对多:当一张表中创建一行数据时,有一个单选的下拉框(可以被重复选择)
例如:创建用户信息时候,需要选择一个用户类型【普通用户】【金牌用户】【铂金用户】等。多对多:在某表中创建一行数据时,有一个可以多选的下拉框
例如:创建用户信息,需要为用户指定多个爱好一对一:在某表中创建一行数据时,有一个单选的下拉框(下拉框中的内容被用过一次就消失了)
例如:原有含10列数据的一张表保存相关信息,经过一段时间之后,10列无法满足需求,需要为原来的表再添加5列数据
详细
1、一对多--ForeignKey
1.1 默认连接id字段
models.py
1
2
3
4
5
6
7
class
Gender(models.Model):
gender
=
models.CharField(max_length
=
2
)
class
User(models.Model):
name
=
models.CharField(max_length
=
10
)
age
=
models.IntegerField()
gender
=
models.ForeignKey(Gender)
cmd
1
2
3
4
5
6
7
|
class Gender(models.Model): gender = models.CharField(max_length = 2 ) class User(models.Model): name = models.CharField(max_length = 10 ) age = models.IntegerField() gender = models.ForeignKey(Gender) |
Django--path > python manager.py makemigrations
Django--path > python manager.py migrate
db--gender表
db--user表
1.2 连接不是id的字段
外键列,默认是用id来连接,这个字段名称自动改为“xx_id”列,如果使用某个字段连接,需要参数to-field:"连接的字段";
models.py
1
2
3
4
5
6
7
|
class Salary(models.Model): name = models.CharField(max_length = 10 ,unique = True ) salary = models.IntegerField() class User(models.Model): name = models.CharField(max_length = 10 ) age = models.IntegerField() salary = models.ForeignKey(Salary,to_field = "name" ) |
db--salary(薪资)表
db--user表
2、多对多--ManyToManyField
models.py
1
2
3
4
5
6
|
class Hobby(models.Model): hobby = models.CharField(max_length = 10 ) class User(models.Model): name = models.CharField(max_length = 10 ) age = models.IntegerField() hobby = models.ManyToManyField(Hobby) |
db--hobby(爱好)表
db--user表
user表中并没有创建hobby列,而是新建了一张表,记录了他们的对应关系。
db--user_hobby
3、一对一--OneToOneField
外键的表每行只能被选择一次
models.py
1
2
3
4
5
6
7
8
|
class Salary(models.Model): name = models.CharField(max_length = 10 ,unique = True ) salary = models.IntegerField() class User(models.Model): name = models.CharField(max_length = 10 ) age = models.IntegerField() salary = models.OneToOneField(Salary,to_field = "name" ) |
Django--models连表构建的更多相关文章
- Django models多表操作
title: Django models多表操作 tags: Django --- 多表操作 单独创建第三张表的情况 推荐使用的是使用values/value_list,selet_related的方 ...
- Django models 单表查询
从数据库中查询出来的结果一般是一个集合,这个集合叫做 QuerySet 1. 查看Django QuerySet执行的SQL .query.__str__()或 .query属性打印执行的sql语句 ...
- django models的点查询/跨表查询/双下划线查询
django models 在日常的编程中,我们需要建立数据库模型 而往往会用到表与表之间的关系,这就比单表取数据要复杂一些 在多表之间发生关系的情形下,我们如何利用models提供的API的特性获得 ...
- 第三百八十节,Django+Xadmin打造上线标准的在线教育平台—将所有app下的models数据库表注册到xadmin后台管理
第三百八十节,Django+Xadmin打造上线标准的在线教育平台—将所有app下的models数据库表注册到xadmin后台管理 将一个app下的models数据库表注册到xadmin后台管理 重点 ...
- day20 Django Models 操作,多表,多对多
1 Django models 获取数据的三种方式: 实践: viwes def business(request): v1 = models.Business.objects.all() v2 = ...
- Django之form表单详解
构建一个表单 假设你想在你的网站上创建一个简单的表单,以获得用户的名字.你需要类似这样的模板: <form action="/your-name/" method=" ...
- url路由、模板语言、ajax、用django框架创建表
1.后台管理的左侧菜单,默认只有第一个页签下面的选项是显示的,点了别的页签再显示别的页签下面的选项,问题是:点了任何菜单的选项后,左侧菜单又成了第一个页签的选项显示,别的页签隐藏,也就是左侧的菜单刷新 ...
- django models数据类型
Django Models的数据类型 AutoField IntegerField BooleanField true/false CharField maxlength,必填 TextField C ...
- django models 类型整理 version:1.8.3
django models 类型整理 version:1.8.3 网上百度到的最上面的一篇已经是11年的了,django变化很大,现在把1.8.3版的models类型大致整理了下贴出来 普通键部分 F ...
随机推荐
- Crontab中shell每分钟执行一次HDFS文件上传不执行的解决方案
一.Crontab -e 加入输出Log */1 * * * * /qiwen_list/upload_to_hdfs.sh > /qiwen_list/mapred.log 2>& ...
- Selenium 3 -how to locate the chromedriver and geckodriver place?
Maybe you met these exceptions sometimes: 1. Chrome Driver The path to the driver executable must be ...
- TCP : two different sockets sharing a port?
A server socket listens on a single port. All established client connections on that server are asso ...
- ios7 UITableView 分割线在 使用selectedBackgroundView 选中时有些不显示
UITableView 选中cell ,默认会有一个灰色的背景遮罩效果,这个灰色遮罩就是cell 自带的 selectedBackgroundView 我们可以设置selectedBackgroun ...
- 使用ClipboardUtils兼容API LEVEL 11以下实现复杂粘贴
实现功能:复杂粘贴内容 问题描述:android.content.ClipboardManager在APILevel 11之后才可以使用,而我们目前还要兼容API Level 10(2.3.3) 解决 ...
- 搞不清FastCgi与PHP-fpm之间是个什么样的关系(转载)
刚开始对这个问题我也挺纠结的,看了<HTTP权威指南>后,感觉清晰了不少. 首先,CGI是干嘛的?CGI是为了保证web server传递过来的数据是标准格式的,方便CGI程序的编写者. ...
- C#实现IDispose接口
.net的GC机制有两个问题:首先GC并不能释放所有资源,它更不能释放非托管资源.其次,GC也不是实时的,所有GC存在不确定性.为了解决这个问题donet提供了析构函数 public class Te ...
- Embeding Python & Extending Python with FFPython
Introduction ffpython is a C++ lib, which is to simplify tasks that embed Python and extend Python. ...
- SAP ECC MM 配置文档
SAP ECC 6.0 Configuration Document Materials Management (MM) Table of Content TOC \o \h \z 1. Genera ...
- Hadoop学习笔记(老版本,YARN之前),MapReduce任务Namenode DataNode Jobtracker Tasktracker之间的关系
一.基本概念 在MapReduce中,一个准备提交执行的应用程序称为“作业(job)”,而从一个作业划分出的运行于各个计算节点的工作单元称为“任务(task)”.此外,Hadoop提供的分布式文件系统 ...