• 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'

  • 相关阅读:
    ssm之spring+springmvc+mybatis整合初探
    mybatis缓存之整合第三方缓存工具ehcache
    mybatis缓存之二级缓存
    mybatis缓存之一级缓存
    mybatis动态sql之利用sql标签抽取可重用的sql片段
    mybatis动态sql之bind标签
    mybatis动态sql之内置参数_parameter和_databaseId
    mybatis动态sql之使用foreach进行批量插入的两种方式
    mybatis动态sql之foreach补充(三)
    Visitor Pattern
  • 原文地址:https://www.cnblogs.com/liushui0306/p/12710366.html
Copyright © 2020-2023  润新知