zoukankan      html  css  js  c++  java
  • 关于Django多变关联查询的orm操作

    表间关系主外键约束,主表存在字表的约束字段。

    在一对多或者多对多的情况下,可以采用正面查询操作,和反面查询操作。

    正面查询,采用主表查询的对象加字表的约束字段。

    反向查询用子表的对象用表名小写加set加all方法。

    如下实例:

    表间关系字段

    class Book(models.Model):
        nid=models.AutoField(primary_key=True)
        title=models.CharField(max_length=32)
        price=models.DecimalField(max_digits=8,decimal_places=2)
        pub_date=models.DateField()
        publish=models.ForeignKey(to='Publish',on_delete=models.CASCADE)  #级联删除
        author=models.ManyToManyField(to='Author')
    
        def __str__(self):
            return self.title
    
    #出版社
    class Publish(models.Model):
        nid=models.AutoField(primary_key=True)
        name=models.CharField(max_length=32)
        email=models.CharField(max_length=32)
    
    #作者
    class Author(models.Model):
        nid=models.AutoField(primary_key=True)
        name=models.CharField(max_length=32)
        age=models.IntegerField()
        email=models.CharField(max_length=32)
        ad=models.OneToOneField(to='AuthorDetail',on_delete=models.CASCADE)     #级联删除
    
        def __str__(self):
            return self.name
    
    #作者详情
    class AuthorDetail(models.Model):
        nid = models.AutoField(primary_key=True)
        addr=models.CharField(max_length=32)
        tel=models.IntegerField()

    查询java这本书的作者的名字和年龄:

    正面查询

        # book_obj = models.Book.objects.filter(title__contains='Java').first()
        # print(book_obj.author.all().values('name','age'))

    王璐写过的书籍名称和价格

    反向查询

       # aut_obj = models.Author.objects.filter(name='王璐').first()
        # print(aut_obj.book_set.all().values('title','price'))

    *****************************************************************************

    一对一的表间关系则不需要all方法或者添加_set属性

    作者李明的详细信息

    正向查询

        # aut_obj = models.Author.objects.filter(name='胡文远').first()
        # print(aut_obj.ad.addr,aut_obj.ad.tel)

    湖北籍的作者信息(此处情况特殊仍旧是一对一)

    反向查询

        obj = models.AuthorDetail.objects.filter(addr__contains='湖北').first()
        print(obj.author.name)
  • 相关阅读:
    微软 软件的 一组堆成快捷键
    C#事件 的讲解
    软件缺陷分析的几种方法
    一个长三角人对深圳的看法 (转)
    一次LoadRunner的CPC考试经历
    测试是一门武功
    ORACLE的性能测试经验总结
    深圳测试协会第九次论坛在深圳举行
    10月28日参加了IBM的产品推介会
    什么是web安全性测试?
  • 原文地址:https://www.cnblogs.com/wen-kang/p/11478688.html
Copyright © 2011-2022 走看看