如何分析django models中的M对N关系

发布时间:2021-12-08 16:06:44 作者:柒染
来源:亿速云 阅读:264

如何分析django models中的M对N关系,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。

下面介绍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'

     )

访问多对多值(Many-to-Many Values)

多对多和外键工作方式相同,只不过我们处理的是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关系问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注亿速云行业资讯频道了解更多相关知识。

推荐阅读:
  1. 96django_modelform
  2. Django 路由系统简述

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

models django

上一篇:如何分析django models中的一对N关系

下一篇:hbase中如何使用split策略

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》