• Django 模型一对一,一对多,多对多的正反查询


    • 先上示例模型
      • 一对一的情况
    class A(models.Model):
        name = models.CharField(max_length=30, blank=True)
        ida = models.CharFileld(max_length=30, blank=True)
    
    class B(models.Model):
        name = models.CharField(max_length=30, blank=True)
        idb = models.CharField(max_length=30, blank=True)
        a = models.OneToOneField(to="A", on_delete=models.CASCADE,related_name='a')

    a_queryset = A.objects.get(id=1)
    b = a_queryset.b
    b_queryset = B.objects.get(id=1)
    a = b_queryset.a

    or

    ida = A.objects.filter(id=1).values('a__ida', 'name')
      • 一对多的情况
    class A(models.Model):
        name = models.CharField(max_length=30, blank=True)
        ida = models.CharFileld(max_length=30, blank=True)
    
    class B(models.Model):
        name = models.CharField(max_length=30, blank=True)
        idb = models.CharField(max_length=30, blank=True)
        a = models.ForeignKey(to="A", on_delete=models.CASCADE,related_name='a')

    正查
    a_id = B.objects.get(id=1).a
    反查
    b_id= A.objects.get(id=1).a.all().values()
    idb= A.objects.filter(id=1).values('a__idb') 这里的 a ☞
    related_name='a'

    没有related_name属性时
    b_id = A.objects.get(id=1).b_set.all().values() 采用类名小写_set的方式
      • 多对多的情况
    class A(models.Model):
        name = models.CharField(max_length=30, blank=True)
        ida = models.CharFileld(max_length=30, blank=True)
    
    class B(models.Model):
        name = models.CharField(max_length=30, blank=True)
        idb = models.CharField(max_length=30, blank=True)
        a = models.ManyToManyField(to="A")

    b= B.objects.get(nid='1')
    a= b.a.all()
    
    a= A.objects.get(id='1')
    b= a.b_set.all()  有related_name属性类似上面

     随手记录,不足之处请多指教!!!

  • 相关阅读:
    字符编码
    数据类型
    流程控制之判断,while循环,for循环
    数据类型,与用户交互,格式化输出,基本运算符
    操作系统,编程语言分类,执行python两种方式,变量,内存管理,定义变量的三个特征
    计算机硬件基础-笔记
    20200714_31adb命令和monkey压力稳定性测试
    20200707_28POM
    20200705_27DDT与Yaml数据驱动
    20200702_26UnitTest套件与运行器
  • 原文地址:https://www.cnblogs.com/leisunny/p/13936776.html
Copyright © 2020-2023  润新知