Model(表设计)
在这里只提经常用到的三种联表结构:
- 一对多:models.ForeignKey(其他表)
- 多对多:models.ManyToManyField(其他表)
- 一对一:models.OneToOneField(其他表)
一、联表结构一对多
一对多:当一张表中创建一行数据时,有一个单选的下拉框(可以被重复选择)
例如:创建用户信息时候,需要选择一个用户类型【普通用户】【金牌用户】【铂金用户】等。文章地址https://www.yii666.com/article/756269.html
网址:yii666.com
先来看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中的一对一表结构可以理解为在多对多的基础上建立的,只不过绑定的表对象里的数据只能出现一次:文章来源地址:https://www.yii666.com/article/756269.html
由上图理解,表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)