zoukankan      html  css  js  c++  java
  • 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'

  • 相关阅读:
    每日日报2020.12.1
    每日日报2020.11.30
    981. Time Based Key-Value Store
    1146. Snapshot Array
    565. Array Nesting
    79. Word Search
    43. Multiply Strings
    Largest value of the expression
    1014. Best Sightseeing Pair
    562. Longest Line of Consecutive One in Matrix
  • 原文地址:https://www.cnblogs.com/liushui0306/p/12710366.html
Copyright © 2011-2022 走看看