几对几的模型结构的使用场景为:一般根据业务需求,同一业务,需要向相关联的多表插入删除数据时,会用到。
一对一:
创建一个用户表
class Users(models.Model):
username = models.CharField(max_length=20,null=true,blank=true)
class Meta:
db_table='users'
创建一个用户详情表
#在用户详情表中,关联用户表,让两个表的数据产生联系
#第一个参数,是被关联的模型名称
#第二个参数:当user用户表中的一条数据被删除时候,与之对应的详情表数据也会被删除
class UserInfo(models.Model):
uid = models.OneToOneField(Users,on_delete=models.CASCADE)
address = models.CharField(max_length=100,null=True)
class Meta:
db_table='userinfo'
生成迁移文件 :python3 manage.py makemigrations
执行迁移文件:python3 manage.py migrate
此时一对一的表创建完成,下面进行操作:
添加数据:向user表中添加一条,同时也会向userinfo相对应的添加一条数据
data = {'name':'ss','age':23}
ob = models.User(**data)
ob.save()
obl = models.UserInfo()
obl.address='ts'
obl.uid=ob
obl.save()
return HttpResponse('一对一')
查询数据:
查询user表数据:
ob = models.User.objects.get(id=11)
根据从表的外键查询主表的数据:
1、先找到从表的该条数据
ui = models.User.objects.first()
2、根据从表的外键拿到主表的信息,格式: ui.从表外键.主表想得到的信息
print(ui.uid.name) #取到对应的主表信息
根据主表的主键查询从表的数据:
1、先找到主表的该条数据
u = models.User.objects.first()
2、根据主表对象拿到从表的信息 ,格式: u.从表.从表想得到的信息
print(u.UserInfo.address)