首页 > 其他分享 >1008.Django模型基础03

1008.Django模型基础03

时间:2023-01-05 21:13:28浏览次数:41  
标签:03 name student 模型 Django Student 1008 department 关联

一、关系表的数据操作

关系表中的数据操作

查看数据库中的表结构

 

 

 一对多表关系数据的添加:

1. 第一种方式就是跟之前一样,用传参的方法添加,需要注意的是外键的值必须是关联表中已存在的值;

2. 第二种方式是用的属性赋值方式,因为我们在模型类有定义了一个department的属性,而这个属性的对象类型必须是department表的类实例对象。

from django.http import HttpResponse
from .models import Department, Student, Stu_detail, Course


def test(request):
    # 往department表里面插入数据
    d1 = Department(d_name='文学院')
    d1.save()
    # 往student数据表里插入数据
    s1 = Student(s_name='凯西', dept_id=1)
    s1.save()
    s2 = Student(s_name='小红')
    s2.dept =d1
    s2.save()

    return HttpResponse('xxxx')

二、表关联对象的访问

 

 Student的模型类中我们有定义department属性,所以当我们去访问的时候,可以直接通过student.department的形式1去找到某个学生的所属学院是哪个。那么如果我们也希望在访问某个学院的实现对象的学生的时候,改怎么访问呢?

 

 如果模型1有一个ForeignKey,那么该ForeigKey所指的模型2实例可以通过一个管理器回前面有ForeigKey的模型1的所有实例。默认情况下,这个管理器的名字为foo_set,其中foo是源模型的小写名称。

 

 可以在定义时设置related_name参数来覆盖foo_setd 名称。

 

 处理关联对象的一些方法:

add(obj1, obj2, ...)添加的已经存在数据库的数据,添加一指定的模型对象到关联的对象集中。

1. d1.student的管理器有add的方法;

2. 例子中的s2能添加成功是因为设置了student表中department字段允许为空了。

 

 

三、多表查询

Django提供一种强大而又直观的方式来“处理”查询中的关联关系,它在后台自动帮你处理JOIN。若要跨越关联关系,只需使用关联的模型字段的名称,并使用双下划线分隔,直至你想要的字段:

# 查询学院名字为“计算机学院”的学生的信息

Student.objects.filter(department__d_name='计算机学院')

它还可以反向工作。若要引用一个“反向”的关系,只需要使用该模型的小写的名称。

# 查询学生名字中包含“小”的学生的学院信息

Department.objects.filter(student__s_name__contains='小')

 

标签:03,name,student,模型,Django,Student,1008,department,关联
From: https://www.cnblogs.com/lxinghua/p/17028860.html

相关文章