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)

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM