关于django models中的关系操作三

关于django models中的关系操作三

GOOD LUCKY 2018

Django 模型层对三种关系模型(1:1,1:N,M:N)都有强大的支持

本次介绍三种关系模型中的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)

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)

author__name__endswith='Chun',

authoring__collaboration_type='essay'

)

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

多对多和外键工作方式相同,只不过我们处理的是QuerySet而不是模型实例。 例如,这里是如何查看书籍的作者:

反向查询也可以。 要查看一个作者的所有书籍,使用author.book_set,就如这样:

这里,就像使用ForeignKey字段一样,属性名book_set是在数据模型(model)名后追加_set。

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180208G0XFGO00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券