• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    Django 外键查询的实现

    创建三张表,详情如下:

    class Publish(models.Model):
        id = models.AutoField(primary_key=True, auto_created=True)
        pname = models.CharField(max_length=40)
        city = models.CharField(max_length=50)
    
        def __str__(self):
            return self.pname
    
    class Author(models.Model):
        id = models.AutoField(primary_key=True, auto_created=True)
        aname = models.CharField(max_length=10)
    
        def __str__(self):
            return self.aname
    
    class Book(models.Model):
        id = models.AutoField(primary_key=True, auto_created=True)
        bname = models.CharField(max_length=30)
        price = models.IntegerField()
        publish = models.ForeignKey(Publish, on_delete=models.CASCADE)
        author = models.ManyToManyField(Author)
    
        def __str__(self):
            return self.bname
    
    

    一、一对多

    通过类属性进行查询

    # get方法的到的结果是一个对应类的对象
    # 查询某本书的出版社名字
    book = Book.objects.get(id=1)
    book.publish.pname
    
    # 查询某出版社下面有多少本书
    # 此处的book是Book这张表的表名的小写(必须是小写)加上_set
    pub = Publish.objects.get(id=1)
    pub.book_set.all()
    
    

    通过Django的双下划线(__)来进行查询

    # 通过出版社的相关信息进行查询某一本书
    Book.objects.filter(publish__city='北京')
    Book.objects.filter(publish__id=1)
    
    # 通过书籍的相关信息进行查询其出版社
    # 此处的book是Book这张表的表名的小写(必须是小写)
    Publish.objects.filter(book__id=1)
    
    # 在values以及values_list中使用(必须加引号)
    # 通过书籍的相关信息进行查询其出版社
    # values得到的结果是一个内部是字典的查询集
    Book.objects.filter(id=1).values('publish__pname')
    # values__list得到的结果是一个内部是元祖的查询集
    Book.objects.filter(id=1).values_list('publish__pname')
    
    # 通过出版社的相关信息进行查询某一本书
     Publish.objects.filter(id=1).values('book__bname')
     Publish.objects.filter(id=1).values_list('book__bname')
    
    

    二、多对多(返回的内部是相关类的对象的查询集)

    在使用多对多时,Django会自动创建额外的一张表来存储其相对关系。这里额外的一张表的表名是blogs_book_author。

    # 通过作者的相关信息查询其某一本书(返回的内部是Book的对象的查询集)
    Book.objects.filter(author__id=1)
    Author.objects.filter(id=1).values('book')
    
    # 查询某一本书对应的作者有哪些(返回的内部是Author的对象的查询集)
    Author.objects.filter(book__id=1)
    Book.objects.filter(id=1).values('author')
    
    

    到此这篇关于Django 外键查询的实现的文章就介绍到这了,更多相关Django 外键查询内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家! 

    您可能感兴趣的文章:
    • django admin.py 外键,反向查询的实例
    上一篇:Win10系统下Pytorch环境的搭建过程
    下一篇:备战618!用Python脚本帮你实现淘宝秒杀
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    Django 外键查询的实现 Django,外键,查询,的,实现,