zoukankan      html  css  js  c++  java
  • 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()
  • 相关阅读:
    [Windows] 重新安装/卸载桌面版OneDrive / Reinstall/ Uninstall Desktop Version OneDrive
    [Linux] 关闭防火墙以及开放端口
    [Java] Properties类
    [Linux] 文档编辑搜索
    [Dababase
    etymological
    [JavaScript] 表单验证不通过不提交的JS写法
    Lyrics来源
    [Maven
    [ Servlet / JSP ] J2EE Web Application 中的 JSESSIONID 是什么?
  • 原文地址:https://www.cnblogs.com/shiqi17/p/9678434.html
Copyright © 2011-2022 走看看