如何分析django models中的M对N关系,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。
创新互联建站是一家专注于成都做网站、成都网站设计与策划设计,金安网站建设哪家好?创新互联建站做网站,专注于网站建设10余年,网设计领域的专业建站公司;建站业务涵盖:金安等地区。金安做网站价格咨询:18982081108
下面介绍django models三种关系模型中的M对N关系:
M对N模型
在sql语言中,M:N关系是通过建立一个中间关系表来完成,该中间表定义了到两个主表的外键。所以也可以用两个1:N来定义M:N.
同时django模型定义了一种更直接的M:N关系的建模方式,即在两个模型中的任意一个中定义models,ManyToManyField类型的字段
多对多关系:
1、直接定义ManyToManyField字段
class Author(models.Model):
name =models.CharField(max_length=100)
class Book(models.Model):
title =models.CharField(max_length=100)
authors =models.ManyToManyField(Author)
book= Book.objects.get(title="Django")
authors = Book.author_set.all() # 获取该书的作者名单
books= author[2].book_set.all() # 获取第三作者所著的所有图书
2、通过中间表定义
class Book(models.Model):
title =models.CharField(max_length=100)
authors =models.ManyToManyField(Author, through="Authoring")
class Authoring(models.Model):
collaboration_type =models.CharField(max_length=100)
book =models.ForeignKey(Book)
author =models.ForeignKey(Author)
chun_essay_compilations = Book.objects.filter(
author__name__endswith='Chun',
authoring__collaboration_type='essay'
)
多对多和外键工作方式相同,只不过我们处理的是QuerySet而不是模型实例。 例如,这里是如何查看书籍的作者:
>>> b = Book.objects.get(id=50) >>> b.authors.all() [<Author: Adrian Holovaty>, <Author: Jacob Kaplan-Moss>] >>> b.authors.filter(first_name='Adrian') [<Author: Adrian Holovaty>] >>> b.authors.filter(first_name='Adam') []
反向查询也可以。 要查看一个作者的所有书籍,使用author.book_set ,就如这样:
>>> a = Author.objects.get(first_name='Adrian', last_name='Holovaty') >>> a.book_set.all() [<Book: The Django Book>, <Book: Adrian's Other Book>]
这里,就像使用 ForeignKey字段一样,属性名book_set是在数据模型(model)名后追加_set。
关于如何分析django models中的M对N关系问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注创新互联行业资讯频道了解更多相关知识。
分享题目:如何分析djangomodels中的M对N关系
标题URL:https://www.cdcxhl.com/article18/jjhsgp.html
成都网站建设公司_创新互联,为您提供定制网站、小程序开发、网站策划、网站建设、域名注册、企业建站
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联