zoukankan      html  css  js  c++  java
  • 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属性类似上面

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

  • 相关阅读:
    Android开发过程中遇到的问题集合(—)
    Android各种屏幕分辨率(VGA、HVGA、QVGA、WQVGA、WVGA、FWVGA) 具体解释
    Android中Context具体解释 ---- 你所不知道的Context
    HttpClient
    StretchDIBits使用方法
    int a[3];中a+1与&a+1差别 -- C
    把质量控制工作往前推进(1)——安装sonarqube
    24点经典算法
    linux服务之udevd
    java实现第六届蓝桥杯星系炸弹
  • 原文地址:https://www.cnblogs.com/leisunny/p/13936776.html
Copyright © 2011-2022 走看看