Django之Model操作之一对多外键(ForeignKey)正反调用【ORM篇五】

上一篇:Django之Model操作之一对一外键(OneToOneField\ForeignKey)正反调用【ORM篇四】 点击跳转
目录篇:Django之model操作ORM目录篇 点击跳转
下一篇:Django之Model操作之多对多(ManyToMany)正反调用【ORM篇六】点击跳转

目录

  • ForeignKey
  •     一对多介绍
  •     一对多字段写在哪个表?
  •     具体示例

ForeignKey

    一对多介绍

一对多关系是最普通的一种关系。在这种关系中,A 表中的一行可以匹配 B 表中的多行,但是 B 表中的一行只能匹配 A 表中的一行。

简单解释:
1.读高中,一个学生属于某一个班,但是某个班却可以有多个学生 ,这里就有两个表:学生表、班级表。
2.所以学生属于哪个班级我们就需要就行外键关联,以后通过该外键我们就可以做到该学生属于哪个班
注意:只要关联的对象有关联对象,关联对象的关联对象也有关联对象,都可以动过第1对象调取关联对象的关联对象的关联对象..以此类推   

    一对多字段写在哪个表?

1.一个班级只可以有一个合同,一个合同可以多个班级,所以是班级表字段关联合同表(写在班级表)
2.一张缴费表只允许一个报名后的客户缴费,一个报名后的客户可以缴费多张表,所以是缴费表字段关联报名表(写在缴费表)
3.一张客户报名表只可以填写一个客户,一个客户报名表可以写多张报名表(所以是报名表客户字段关联客户表)
4.一张客户报名表允许一个销售负责,但是一个销售可以负责多张客户报名表(所以是报名表销售字段关联销售表)
5.一张客户报名表值允许报一个班级,但是一个班级可以有多张客户报名表(所以是客户报名表的班级字段关联班级表)

    具体示例

实战Django之Model操作之一对多外键(ForeignKey)正反调用 https://blog.csdn.net/Burgess_zheng/article/details/86593203

表类

  路径:project/app/models.py

from django.db import models
class A(models.Model):
     name = models.CharField(max_length=34)

class B(models.Model):
    name = models.CharField(max_length=34)
    a_key = models.ForeignKey("A",related_name='n',on_delete=models.CASCADE)

表数据

A表

B表

外键调用方式

路径:project/app/views.py

from app import models
def models_handle(request):
    A_obj = models.A.objects.filter()#获取全部或者匹配的列表形式
    A_obj = models.A.objects.all()#获取全部列表
    A_obj = models.A.objects.get(id=1)#一个queryset对象 #如果匹配不到,或者匹配的超出一个报错
    A_obj = models.A.objects.first() #获取该表第一个queryset对象
    B_obj = models.B.objects.first()

    #正向调取:(通过表内外键字段 “a_key”)
    B_obj.a_key.name  #得到结果:小红
    #反向调取:(通过外键字段related_name反向操作)
    A_obj.n.all()[0].name  #得到结果:小明
        #插入:如果创建数据库表B表没有related_name该参数反向调取:(”B表名小写” + “_set”)
        #A_obj.b_set.all()[0].name #得到结果:小明

上一篇:Django之Model操作之一对一外键(OneToOneField\ForeignKey)正反调用【ORM篇四】 点击跳转
目录篇:Django之model操作ORM目录篇 点击跳转
下一篇:Django之Model操作之多对多(ManyToMany)正反调用【ORM篇六】点击跳转​​​​​​​

 

你可能感兴趣的:(Django)