django框架学习:二十九.django 外键(ForeignKey)使用,查询

前言

前面学习了一对一查询,今天学习一下外键(ForeignKey)使用查询

models.py 

在上篇的基础上,在添加一张银行信息。

 

 将银行卡信息和Card表关联。

 

 之后执行 makemigrations 和migrate,同步数据

python manage.py makemigrations
python manage.py migrate

shell模式新增数据

进入到manage.py文件目录,cmd进入命令行页面

输入:python manage.py shell

新增数据

先导入包

from ke25.models import Card,BankInformation

创建数据:

 

查询数据库:

BankInformation表

 

 

正向查询

根据Card的信息取查询BankInformation相关联的银行卡信息

 cardinfo = Card.objects.get(card_id='0002')

反向查询_set

假如想通过“银行名称”反向查询银行关联的多少银行卡,并且能够查询每个银行卡的信息,当ForeignKey没设置related_name参数,默认是通过关联表的名称加_set去查询。

  • 查询结果是QuerySet集合对象
  • count()函数统计查询个数
  • [0].card_id 下标取值,获取对应属性

 

 

 related_name

Card的外键只有一个时,可以通过_set去查询到,当有多个外键时,就无法查询具体哪个外键了,这时候就需要加个related_name参数。related_name参数相当于给这个外键取了个别名,方便多个外键时候去识别。以下是新增数据和正向查询

当定义了related_name后”_set”这类查询就被related_name代替了,所以用”_set”会报错。

 

 反向查询需要用到related_name参数,如下

nn=Card_Grade.objects.get(nub='黄金会员')

nn.cardgrade.all() <QuerySet [<Card: 0005>]>

 nn.cardgrade.all()[0].card_id '0005'

# BankInformation表查Card表

bb=BankInformation.objects.get(bank_name='上海银行')

 bb.card_bank.all() <QuerySet [<Card: 0005>]>

bb.card_bank.all()[0].card_id '0005'

posted @ 2020-04-16 16:52  流水小哥  阅读(4958)  评论(0编辑  收藏  举报