- 一对多:models.ForeignKey(其他表)
- 多对多:models.ManyToManyField(其他表)
- 一对一:models.OneToOneField(其他表)
应用场景:
- 一对多:当一张表中创建一行数据时,有一个单选的下拉框(可以被重复选择)
例如:创建用户信息时候,需要选择一个用户类型【普通用户】【金牌用户】【铂金用户】等。 - 多对多:在某表中创建一行数据时,有一个可以多选的下拉框
例如:创建用户信息,需要为用户指定多个爱好 - 一对一:在某表中创建一行数据时,有一个单选的下拉框(下拉框中的内容被用过一次就消失了
例如:原有含10列数据的一张表保存相关信息,经过一段时间之后,10列无法满足需求,需要为原来的表再添加5列数据
一对多:
from django.db import models
# Create your models here.
class UserType(models.Model):
name = models.CharField(max_length=50)
class UserInfo(models.Model):
username = models.CharField(max_length=50)
password = models.CharField(max_length=50)
email = models.EmailField()
user_type = models.ForeignKey('UserType')
这是UserInfo表,可以通过外键,对应到UserType表的ID
这是User_Type表的数据
多对多:
from django.db import models
# Create your models here.
class UserType(models.Model):
name = models.CharField(max_length=50)
class UserInfo(models.Model):
username = models.CharField(max_length=50)
password = models.CharField(max_length=50)
email = models.EmailField()
user_type = models.ForeignKey('UserType')
class UserGroup(models.Model):
GroupName = models.CharField(max_length=50)
user = models.ManyToManyField("UserInfo")
Django model会自动创建第3张关系表,用于对应UserInfo_id 和UserGroup_id
UserInfo表如上所示:
UserGroup表
Django自动生成的对应关系表
userinfo_id = 1 为 Boss,属于1(用户组A)
一对一: (一对多增加了不能重复):
from django.db import models
# Create your models here.
class UserType(models.Model):
name = models.CharField(max_length=50)
class UserInfo(models.Model):
username = models.CharField(max_length=50)
password = models.CharField(max_length=50)
email = models.EmailField()
user_type = models.ForeignKey('UserType')
class UserGroup(models.Model):
GroupName = models.CharField(max_length=50)
user = models.ManyToManyField("UserInfo")
class Admin(models.Model):
Address = models.CharField()
user_info_address = models.OneToOneField('UserInfo')