一、关系字段
一对多
外键类型在ORM中用来表示外键关联关系,一般吧ForeignKey字段设置在’一对多’中’多的一方’.
例如:一个学科对应多个学生,一个学生对应一个学科
字段: ForeignKey
字段参数:
to : 设置要关联的表。
to_field : 设置要关联的表的字段。 默认关联的是表的id。
如果想关联其他字段名称可以使用此字段。
on_delete: 当删除关联表中的数据时,当前表与其关联的行的行为。
models.CASCADE :删除关联数据,与之关联也删除。
models.DO_NOTHING:删除关联数据,引发错误IntegrityError。
models.PROTECT: 删除关联数据,引发错误ProtectedError。
(1)增
练习1: 新增学员赵四 学python 学科
方式一:
#sub_obj = models.Subject.objects.get(name=‘python’)
#sub_obj.student_set.create(name=‘赵四’, age=23)
方式二:
#sub_obj = models.Subject.objects.get(name=‘python’)
#student_obj = models.Student()
#student_obj.name = ‘赵四1’
#student_obj.age = 31
#student_obj.subject = sub_obj
#student_obj.save()
(2)删
(1). 赵四退学
models.Student.objects.get(name=‘赵四’).delete()
(2). python 解散
models.Subject.objects.get(name=‘python’).delete()
(3)改
修改 将赵四 修改成学java
sub_obj = models.Subject.objects.get(name=‘java’)
student_obj = models.Student.objects.get(name=‘赵四’)
sub_obj.student_set.set([student_obj])
(4)查
(1).正向查询 张三的学科
# student_obj = models.Student.objects.get(name=‘张三’)
# subject_obj = student_obj.subject # 直接是对象
#print(subject_obj)
(2).反向查询 python学科对应的学生
# subject_obj = models.Subject.objects.get(name=‘python’)
# student_obj_list = subject_obj.student_set.all()
#print(student_obj_list)
#<QuerySet [<Student: name:张三>, <Student: name:李四>]>