Django中怎么实现一对多、多对多的外键查询

Admin 2022-06-28 群英技术资讯 401 次浏览

今天这篇我们来学习和了解“Django中怎么实现一对多、多对多的外键查询”,下文的讲解详细,步骤过程清晰,对大家进一步学习和理解“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中怎么实现一对多、多对多的外键查询”的介绍了,感谢各位的阅读,如果大家想要了解更多相关的内容,欢迎关注群英网络,小编每天都会为大家更新不同的知识。
群英智防CDN,智能加速解决方案
标签: Django外键查询

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。

猜你喜欢

成为群英会员,开启智能安全云计算之旅

立即注册
专业资深工程师驻守
7X24小时快速响应
一站式无忧技术支持
免费备案服务
免费拨打  400-678-4567
免费拨打  400-678-4567 免费拨打 400-678-4567 或 0668-2555555
在线客服
微信公众号
返回顶部
返回顶部 返回顶部
在线客服
在线客服