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(表结构)的更多相关文章

  1. Django中的Model(字段)

    Model Django中的model是用来操作数据库的,Model是一个ORM框架,我们只需要关心model的操作,而不需要关心到底是哪一种数据库. 一.基本知识: 数据库引擎: Django中自带 ...

  2. Django中的Model继承

    Django 中的 model 继承和 Python 中的类继承非常相似,只不过你要选择具体的实现方式:让父 model 拥有独立的数据库:还是让父 model 只包含基本的公共信息,而这些信息只能由 ...

  3. Django 中的 model 继承

    Django 中的 model 继承和 Python 中的类继承非常相似,只不过你要选择具体的实现方式:让父 model 拥有独立的数据库:还是让父 model 只包含基本的公共信息,而这些信息只能由 ...

  4. Django中ORM创建表关系

    一:django中ORM创建表关系 ORM创建外键关系 1.表与表之间的关系 1.表与表之间的关系 一对多 一对一 多对多 2.操作目标条件: 图书表 出版社表 作者表 作者详情表 3.外键关联 一对 ...

  5. sql脚本来获取数据库中的所有表结构了

    sql脚本来获取数据库中的所有表结构了,代码如下: use AdventureWorks2008 go SELECT (case when a.colorder=1 then d.name else ...

  6. Django模型系统——ORM表结构对应关系

    对于数据库来说一般表结构只会有三种对应关系,分别是一对一.一对多和多对一,下面分别介绍: 1.一对多 何为一对多,例如一个学生只可能有一个班级,一个班级却又多个学生,班级表和学生表就是一对多的关系. ...

  7. Django中的Model(操作表)

    Model 操作表 一.基本操作 # 增 models.Tb1.objects.create(c1='xx', c2='oo') #增加一条数据,可以接受字典类型数据 **kwargs obj = m ...

  8. django中的Model模型一:

    在django的框架设计中采用了mtv模型,即Model,template,viewer Model相对于传统的三层或者mvc框架来说就相当对数据处理层,它主要负责与数据的交互,在使用django框架 ...

  9. Django中的Form表单

    Django中已经定义好了form类,可以很容易的使用Django生成一个表单. 一.利用Django生成一个表单: 1.在应用下创建一个forms文件,用于存放form表单.然后在forms中实例华 ...

随机推荐

  1. MSSQL Server语句

    随机从数据库中取出20条数据:select top 20 * from 表名 order by newid()

  2. MVVM模式应用 之加载Pivot的数据

    在Pivot布局里,在进入页面时,不想页面数据全部加载,而是移动到哪个privotItem,加载那个privotItem的值. 这时我们先给pivot绑定一个command. <phone:Pi ...

  3. header("Location:login.php")

    header("Location:login.php")应该注意的几个问题  header("Location:")作为php的转向语句.其实在使用中,他有几点 ...

  4. js 中特殊形势的函数-匿名函数的应用

    javascript中的匿名函数,那什么叫做匿名函数? 匿名函数就是没有函数名称:演示代码: <script> function(x,y){ return x+y //这个就是一个匿名函数 ...

  5. MyISAM 和 InnoDB 讲解[转]

    MyISAM 和 InnoDB 讲解 InnoDB和MyISAM是许多人在使用MySQL时最常用的两个表类型,这两个表类型各有优劣,视具体应用而定.基本的差别为:MyISAM类型不支持事务处理等高级处 ...

  6. DXP 技巧和龙芯3A装机

    时间过得好快!来公司已经半个月多了!本想着每日一搏,可是一再被耽搁,到今天才写.好了,废话不说了.就把自己这些天做的事写一些.理一理吧.也希望大家监督,由于水平有限,有不正确的地方,还望指正! 刚来做 ...

  7. 网页错误404 or 500

    HTTP 错误 400 400 请求出错 由于语法格式有误,服务器无法理解此请求.不作修改,客户程序就无法重复此请求. HTTP 错误 401 401.1 未授权:登录失败 此错误表明传输给服务器的证 ...

  8. jQuery设置按钮被点击状态

    js和jquery如何使按钮失效,很简单,只要设置disabled属性为true即为不可用状态即可 1.JS方法一: document.getElementByIdx("btn") ...

  9. 深入了解一下PYTHON中关于SOCKETSERVER的模块-D

    在LINUX上以FORK的方式使用SIMPLEHTTPSERVER. 记得哟,THREADING能在WIN和LINUX上实现,但FORK,不支持WIN的. 除了SIMPLE之外,还有CGI,就不示例啦 ...

  10. Java数据类型和MySql数据类型对应一览

    类型名称 显示长度 数据库类型 JAVA类型 JDBC类型索引(int) 描述             VARCHAR L+N VARCHAR java.lang.String 12   CHAR N ...