Django中的Model(表结构)

Model(表设计)

 

在这里只提经常用到的三种联表结构:

  • 一对多:models.ForeignKey(其他表)
  • 多对多:models.ManyToManyField(其他表)
  • 一对一:models.OneToOneField(其他表)

 

 

一、联表结构一对多

一对多:当一张表中创建一行数据时,有一个单选的下拉框(可以被重复选择)
例如:创建用户信息时候,需要选择一个用户类型【普通用户】【金牌用户】【铂金用户】等。

 

先来看django  models里面是怎么写的:

 1 class Color(models.Model):
 2 
 3     name = models.CharField(max_length=15)
 4 
 5 
 6 class Someting(models.Model):
 7 
 8     c1 = models.CharField(max_length=15)
 9     c2 = models.CharField(max_length=15)
10     c3 = models.CharField(max_length=15)
11     c4 = models.CharField(max_length=15)
12     color = models.ForeignKey(Color)        #设置外键为另一个类名
13 
14 
15 class Host(models.Model):
16     hostname = models.CharField(max_length=15)
17     business = models.ForeignKey('Business')    #用引号的方式是避免外键的类在下面而导致的报错
18 
19 
20 class Business(models.Model):
21     name = models.CharField(max_length=15)

 

 

在数据库中的两张表,可以看到设置外键的那列关联到了另一张表上的id列:

color表

 

something表:

 

同样也可以有选择性的关联另一张表中的数据:

参数:to_field=“”

 1 class Shoplist(models.Model):
 2 
 3     name = models.CharField(max_length=15, null=True, unique=True)   #必须要设置unique = True,(不能重复)
 4     price = models.CharField(max_length=15)
 5 
 6 
 7 class Shop(models.Model):
 8 
 9     v1 = models.CharField(max_length=15)
10     v2 = models.CharField(max_length=15)
11     pr = models.ForeignKey(Shoplist, to_field='name')    

 

二、联表结构多对多

 

一张图诠释了多对多的含义:

 

在django中的models里:

 1 class Group(models.Model):
 2 
 3     groupname = models.CharField(max_length=15)
 4 
 5 
 6 class User(models.Model):
 7 
 8     name = models.CharField(max_length=15)
 9     email = models.CharField(max_length=15)
10     phone = models.CharField(max_length=15)
11     group = models.ManyToManyField(Group)    #与表Group创建多对多的关联

 

 

在这里我们不需要专门创建第三张关联的表,django自动就为我们创建了第三张表:

 

三、联表结构一对一

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

由上图理解,表A与表B建立了一对一的结构。(B建立了与A的一对一),那么表A中的数据在表B中只能出现一次。

 

在django的model里:

 1 class User2(models.Model):
 2 
 3     name = models.CharField(max_length=15)
 4     email = models.CharField(max_length=15)
 5     phone = models.CharField(max_length=15)
 6 
 7 
 8 class Group2(models.Model):
 9 
10     groupname = models.CharField(max_length=15)
11     group = models.OneToOneField(User2)

 

posted on 2016-03-23 10:10  让我们忘了那片海  阅读(2720)  评论(0编辑  收藏  举报

导航