• Django ORM 反向查询


    一/一对多反向查询
      - 先定义两个模型,一个是A,一个是B,是一对多的类型。
    class A(models.Model):
      name= models.CharField('名称', max_length=32)
     
    class B(models.Model):
      a= models.ForeignKey(A, verbose_name='A类',related_name = "test")
      name = models.CharField('称呼', max_length=16)
    
    • 如果我们要查询一个A拥有哪些B的话,那我们要怎么做呢
      通过主表来查询子表
       
      A.objects.get(id=A_id).test.all().order_by('-created')

    • django 默认每个主表的对象都有一个是外键的属性,可以通过它来查询到所有属于主表的子表的信息。这个属性的名称默认是以子表的名称小写加上_set()来表示(上面默认以b_set访问),默认返回的是一个querydict对象。
      related_name 可以给这个外键定义好一个别的名称
      通过子表来查询主表

    B.objects.filter(a=A_id).order_by('-created')

    二、多对多反向查询
    • 现有表关系如下
    class Author(models.Model):
    
        name = models.CharField(max_lenget=32)
        r_To_b = models.ManyToManyField('Book')
    
        #r_To_b = models.ManyToManyField('Book', related_name='auth')
    
    
    class Book(models.Model):
        b_name = models.CharField(max_lenget=32)
    
    • 反向查询:
      obj = models.Book.filter(b_name='xxx').first()
      aobj = obj.author_set()
       
      如果你使用了如我上面的related_name='auth' 别名属性,就可以
      aobj = obj.auth.all()
  • 相关阅读:
    python-进程池实例
    python-进程通过队列模拟数据的下载
    python-多进程模板
    python-多线程同步中创建互斥锁解决资源竞争的问题
    CentOS6.5配置网络
    解决CentOS系统Yum出现"Cannot find a valid baseurl for repo"问题
    CentOS 6.5安装图形界面
    Centos安装git
    Web前端优化,提高加载速度
    谁说写代码的不懂生活
  • 原文地址:https://www.cnblogs.com/shiqi17/p/9678434.html
Copyright © 2020-2023  润新知