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

  • 相关阅读:
    Instr() 函数用法
    tomcat通过tomcat 安装根目录下的conf-Catalina-localhost目录发布项目详解
    字符串中包含任意几个字符中的至少一个
    四大奶粉中的三个
    mysql几个操作数据库命令符下的常用命令
    访问网络资源302 200 解释
    浅谈Java变量的初始化顺序详解
    static块的本质
    迭代器
    集合接口和类
  • 原文地址:https://www.cnblogs.com/liushui0306/p/12710366.html
Copyright © 2020-2023  润新知