Django中的Model(表结构)
Model(表设计)
在这里只提经常用到的三种联表结构:
- 一对多:models.ForeignKey(其他表)
- 多对多:models.ManyToManyField(其他表)
- 一对一:models.OneToOneField(其他表)
一、联表结构一对多
一对多:当一张表中创建一行数据时,有一个单选的下拉框(可以被重复选择)
例如:创建用户信息时候,需要选择一个用户类型【普通用户】【金牌用户】【铂金用户】等。

先来看django models里面是怎么写的:
class Color(models.Model):
name = models.CharField(max_length=15)
class Someting(models.Model):
c1 = models.CharField(max_length=15)
c2 = models.CharField(max_length=15)
c3 = models.CharField(max_length=15)
c4 = models.CharField(max_length=15)
color = models.ForeignKey(Color) #设置外键为另一个类名
13
class Host(models.Model):
16 hostname = models.CharField(max_length=15)
business = models.ForeignKey('Business') #用引号的方式是避免外键的类在下面而导致的报错
class Business(models.Model):
21 name = models.CharField(max_length=15)
在数据库中的两张表,可以看到设置外键的那列关联到了另一张表上的id列:
color表:

something表:

同样也可以有选择性的关联另一张表中的数据:
参数:to_field=“”
class Shoplist(models.Model):
name = models.CharField(max_length=15, null=True, unique=True) #必须要设置unique = True,(不能重复)
price = models.CharField(max_length=15)
class Shop(models.Model):
v1 = models.CharField(max_length=15)
v2 = models.CharField(max_length=15)
pr = models.ForeignKey(Shoplist, to_field='name')
二、联表结构多对多
一张图诠释了多对多的含义:

在django中的models里:
class Group(models.Model):
groupname = models.CharField(max_length=15)
class User(models.Model):
name = models.CharField(max_length=15)
email = models.CharField(max_length=15)
phone = models.CharField(max_length=15)
group = models.ManyToManyField(Group) #与表Group创建多对多的关联
在这里我们不需要专门创建第三张关联的表,django自动就为我们创建了第三张表:

三、联表结构一对一
django中的一对一表结构可以理解为在多对多的基础上建立的,只不过绑定的表对象里的数据只能出现一次:

由上图理解,表A与表B建立了一对一的结构。(B建立了与A的一对一),那么表A中的数据在表B中只能出现一次。
在django的model里:
class User2(models.Model):
name = models.CharField(max_length=15)
email = models.CharField(max_length=15)
phone = models.CharField(max_length=15)
class Group2(models.Model):
groupname = models.CharField(max_length=15)
group = models.OneToOneField(User2)
Django中的Model(表结构)的更多相关文章
- Django中的Model(字段)
Model Django中的model是用来操作数据库的,Model是一个ORM框架,我们只需要关心model的操作,而不需要关心到底是哪一种数据库. 一.基本知识: 数据库引擎: Django中自带 ...
- Django中的Model继承
Django 中的 model 继承和 Python 中的类继承非常相似,只不过你要选择具体的实现方式:让父 model 拥有独立的数据库:还是让父 model 只包含基本的公共信息,而这些信息只能由 ...
- Django 中的 model 继承
Django 中的 model 继承和 Python 中的类继承非常相似,只不过你要选择具体的实现方式:让父 model 拥有独立的数据库:还是让父 model 只包含基本的公共信息,而这些信息只能由 ...
- Django中ORM创建表关系
一:django中ORM创建表关系 ORM创建外键关系 1.表与表之间的关系 1.表与表之间的关系 一对多 一对一 多对多 2.操作目标条件: 图书表 出版社表 作者表 作者详情表 3.外键关联 一对 ...
- sql脚本来获取数据库中的所有表结构了
sql脚本来获取数据库中的所有表结构了,代码如下: use AdventureWorks2008 go SELECT (case when a.colorder=1 then d.name else ...
- Django模型系统——ORM表结构对应关系
对于数据库来说一般表结构只会有三种对应关系,分别是一对一.一对多和多对一,下面分别介绍: 1.一对多 何为一对多,例如一个学生只可能有一个班级,一个班级却又多个学生,班级表和学生表就是一对多的关系. ...
- Django中的Model(操作表)
Model 操作表 一.基本操作 # 增 models.Tb1.objects.create(c1='xx', c2='oo') #增加一条数据,可以接受字典类型数据 **kwargs obj = m ...
- django中的Model模型一:
在django的框架设计中采用了mtv模型,即Model,template,viewer Model相对于传统的三层或者mvc框架来说就相当对数据处理层,它主要负责与数据的交互,在使用django框架 ...
- Django中的Form表单
Django中已经定义好了form类,可以很容易的使用Django生成一个表单. 一.利用Django生成一个表单: 1.在应用下创建一个forms文件,用于存放form表单.然后在forms中实例华 ...
随机推荐
- iOS navigationBar导航栏底部与self.view的分界线的隐藏
ios开发中经常碰到各种需求,比如要求导航栏的颜色和self.view的颜色一样,当我们直接设置navigationBar的颜色和view一样时,我们会发现navigationBar还会有一条分割线留 ...
- linux下安装svn(基于编码的方式)
svn是什么,相信能看到这里的同学应该不会有这个问题了,费话不多说,开始: 1.创建目录 mkdir /home/svn/ 2.获取安装svn所需源文件(svn的官方网址是http://subvers ...
- Android中解析XML的方法
假设我要解析如下的XML文件: <?xml version="1.0" encoding="UTF-8"?> <books> <b ...
- C++常量的引用 const
如果是对一个常量进行引用,则编译器首先建立一个临时变量,然后将该常量的值置入临时变量中,对该引用的操作就是对该临时变量的操作.对C++常量引用可以用其它任何引用来初始化:但不能改变. 关于引用的初始化 ...
- Linux权限体系总结
总结 1. LINUX9位权限及rwx字符的作用.对应的数字及对应的用户和用户组图解. 2. rwx对文件来说代表什么意思. 3. rwx对目录来说代表什么意思. 4. 企业生产环境目录设置权 ...
- js上传图片并预览
<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <m ...
- php ob_ 开头的相关函数
<?phpbool ob_start([ callback $output_callback [, int $chunk_size [, bool $erase ]]]); /* 打开输出控制缓 ...
- make xxx Is a directory. Stop.
转自:make xxx Is a directory. Stop. 的原因 make xxx Is a directory. Stop. 的原因 编译内核时候的一个错误提示 make: *** ...
- 转:阿里开源Mysql分布式中间件:Cobar
原文来自于:http://hualong.iteye.com/blog/2102798 这几天研究了下Cobar, Cobar是阿里巴巴研发的关系型数据的分布式处理系统(Amoeba的升级版,该产品成 ...
- 用wpf实现了多个excel文件的合并
最近公司做了一个微信红包的项目,其中一个主要的工作内容是 将238万张券导入到微信平台里面,用于微信卡券的领取和核销.但是提供给我的券都是以一个个的excel文件给到的.然后通过excel文件的导入功 ...