Django多表连接查询方法
Django多表连接查询方法
一、Django多表连接是怎么实现的?
对于这个问题小白将举一个多对1的例子给大家讲解,首先要准备好需要用的软件
vs code,navicat数据库图形化工具。
二、建立连接
1、定义模型类,并建立1对多关系
(1)学院模型
class department(models.Model): # 学院
dm_id = models.CharField('学院编号', max_length=12, primary_key=True)
dm_name = models.CharField('学院名', unique=True, max_length=32)
dm_dean = models.CharField('主任', max_length=32)
dm_phone = models.CharField('电话', max_length=32)
(2)学生模型
其中外键是department_name
class student(models.Model): # 学生 与学院、专业是(多对1)
stu_id = models.CharField('学号', max_length=12, primary_key=True)
stu_name = models.CharField('姓名', max_length=32)
stu_sex = models.BooleanField('性别', choices=((0, '女'), (1, '男')))
stu_age = models.IntegerField('年龄')
department_name = models.ForeignKey(
"department", on_delete=models.SET_NULL,to_field='dm_name', verbose_name='学院', null=True) # 学院名 学院的外键,to_field='dm_name'是指定外键关联的是'dm_name'
major_name = models.ForeignKey(
"major", on_delete=models.SET_NULL,to_field='major_name', null=True, verbose_name='专业') # 专业名 专业的外键
stu_class = models.CharField(max_length=64, verbose_name='班级')
stu_phone = models.CharField('电话', max_length=32)
stu_address = models.CharField('地址', max_length=32)
stu_email = models.EmailField('邮箱', default=None)
password = models.CharField('密码', max_length=32,default='1234') # 默认为空 唯一值
2.数据库迁移
python manage.py makemigrations
python manage.py migrate
详细的数据库连接、迁移 见以下链接:
三、多表查询
1、查询所有学生所在学院的学院编号、学院姓名
在views.py中的查询方法如下:
stu=student.objects.all().select_related("department_name")
for i in stu:
print(i.stu_id,i.department_name.dm_id,i.department_name.dm_name,i.department_name)
select_related("department_name")使用这样一个方式查询, department_name是学生表关联的外键名, 最终 通过for循环输出,其中i.department_name变成了department object (d004)类型,不再是学生表的学院名称了
结果如下:
2、 查询学号为1的同学的姓名,学院名,学院编号
在views.py中的查询方法如下:
stu=student.object.sselect_related("major_name").get(stu_id=1)
print(i.stu_id,i.department_name.dm_id,i.department_name.dm_name,i.department_name)
总结
以上就是今天要讲的内容,本文仅仅展现了简单的多表查询。
更多推荐
所有评论(0)