您的位置:首页 > 编程语言 > Go语言

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

2019-01-22 14:20 239 查看
版权声明:本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。本文为博主原创文章,转载请附上博文链接! https://blog.csdn.net/Burgess_zheng/article/details/86593434

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

目录

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

[code]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

[code]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篇六】点击跳转​​​​​​​

 

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: