• django中关联(一对多)查询的两种方式,理一理


    关联查询有两种方式:一种是创建类对象,通过类对象查询。另外一种是通过模型类查询。两种方式单独看没问题,放一起看就混了。这边我来帮大家理一理

    首先:一类和多类要理清:在数据库中,一类中的一条记录对应着多类中的多条记录,多类中保存着可以知道每一条记录对应的一类记录是什么   的关联属性。

    第一种方式:类对象查询(属性以id为例),这个比较好理解,你就看哪个类有关联属性就完了

      ①. 知道一类的id,去查询对应的多类的信息:

    创建一类的对象,     一类对象.多类类名小写_set.all()

      ②.知道多类的id,去查询对应的一类的信息:

    创建多类的对象,     多类对象.关联属性

    第二种方式:模型类查询(属性以id为例)

      ①.知道一类的id,去查询对应的多类的信息:

    多类类名.objects.filter(多类中的关联属性__id=值)

      ②.知道多类的id,去查询对应的一类的信息:

    一类类名.objects.filter(多类类名小写__id=1)

    由于模型类查询的方法用的filter,在关联的同时还能加上条件判断,因此工作中基本都是用这种方法。

    下面是加上条件判断的模型类查询公式:

    (一个英雄有多个技能,每个英雄技能都不一样,英雄类名HeroInfo,技能类名SkiInfo,技能中关联英雄的属性s_hero)

      ①.查询多类信息,对应的一类信息有一个条件判断:

    多类类名.objects.filter(多类中的关联属性__一类属性名__条件),例如:查询技能信息,要求英雄的名字中有‘德玛’,
    
    SkiInfo.objects.filter(s_hero__hname__contains='德玛')

      ②.查询一类信息,对应的多类中有一个条件判断:

    一类类名.objects.filter(多类类名小写__多类属性名__条件),例如:查询英雄信息,要求技能id小于5
    
    HeroInfo.objects.filter(skiinfo__id__lt=5)

    最后对模型类查询来个小总结:

    1.想查询哪个类中的信息,就以哪个类名.object.filter开头

    2.多类类名开头,filter括号内 关联属性开头。一类类名开头,fulter括号内 多类类名小写开头。后面都是条件判断(如上面的一类有条件判断或多类有条件判断)

  • 相关阅读:
    QT+Linux+FFmpeg+C/C++实现RTSP流存储为MP4视频文件
    FFmpeg接收RTSP并将H264保存为MP4
    第一次在此定义 多重定义 multiple definition of
    无法定位程序输入点_ZdaPvj于动态链接库 Qt5Core.dl Qt5Gui.dll上
    QObject::startTimer: QTimer can only be used with threads started with QThread
    ONVIF开发编译时提示stdsoap2.o中multiple definition of 'namespaces'问题的解决
    ONVIF开发(1)生成开发框架
    VUE从入门到放弃(项目全流程)————VUE
    UI库colorui的使用————小程序
    超简单详细的搭建个人网站————静态网站
  • 原文地址:https://www.cnblogs.com/zzmx0/p/12839511.html
Copyright © 2020-2023  润新知