day18-DjangoORM外键操作
一、前言
之前我们都是单表操作的,今天我们来研究一下,django的orm的外键操作,也就是一对多的约束。这个想必都熟悉了吧。就是说一个人对应一个部门,但是一个部门对应多个人。
二、设置外键的语法
2.1、语法
外键名 = models.ForeignKey("类名",to_field="关联字段",default=默认值,on_delete=models.CASCADE,) #关联字段必须是唯一的,这个to_field不加也可以,默认用的就是主键
三、外键操作
3.1、创建外键关系
说明:创建UserInfo和UserGroup关系,通过在UserInfo表中创建外键,建立两个表一对多的关系
class UserGroup(models.Model):
uid = models.AutoField(primary_key=True)
groupname = models.CharField(max_length=32)
ctime = models.DateTimeField(auto_now_add=True,null=True)
utime = models.DateTimeField(auto_now=True,null=True)
class UserInfo(models.Model):
username = models.CharField(max_length=32,help_text="用户名")
password = models.CharField(max_length=60)
#创建UserGroup的外键关系,字段参数on_delete=models.CASCADE,是django2.0加进来的
user_group = models.ForeignKey("UserGroup",to_field="uid",default=1,on_delete=models.CASCADE,)
user_type_choices = (
(1,"超级用户"),
(2,"普通用户"),
(3,"访客"),
)
user_type_id = models.IntegerField(choices=user_type_choices,default=1)
UserInfo的表结构生成如图:

在数据库中django自动帮你生成了user_group_id这个字段,而且数字类型是 数字类型。
3.2、生成表结构关系

3.3、UserInfo生成的产物
说明:之前我们看到数据库里面生成了user_group_id,但是不止只有这个,还有user_group,这个user_group代指的是UserGroup这个数据表类的对象。

使用user_group对象的场景:
def user_info(request):
from app01 import models
if request.method == "GET":
user_list = models.UserInfo.objects.all()
for row in user_list:
print(row.id)
print(row.user_group.uid)
print(row.user_group.groupname)
return render(request,'user_info.html',{'user_list':user_list})
如图:

显示在前端:

四、总结
- 创建外键语法:外键名 = models.ForeignKey("类名",to_field="关联字段",default=默认值,on_delete=models.CASCADE,)
- 外键名在数据库生成:外键名_id,且外键名是关联类的一个对象,这个对象包括类里面的所有属性。

浙公网安备 33010602011771号