1、创建项目和app(这里使用的是pycharm快速创建的方式)
2、多对多
就是指一个表中的一条数据对应一个表中的多条数据,另外一个表中的一条数据对应着前一个表中的多条数据。
简单的理解如图所示:
举个例子。以出版社和文章为例,一个出版社可以出版多篇文章,一篇文章也可以被多个出版社出版。如果按照一对多的关系做映射,那么就会出现一篇文章的id就会对应多个出版社的id的集合,但是关系型数据库中并不支持集合,所以这样就会出现问题,这时就需要多对多的关系实现第三张表(会自动根据多对多关系创建)。以下图做讲解:
3、编写models.py。
①定义一个publication类和Article类。
对于一对多的关系,Foreig
而对于多对多的:关系可以设置在任意一个表中。现在我们添加至Article类中。
对于多对多关系,关系是可以设置在任意一个表中。通常我们将设置了多对多关系的称之为从表,没有设置的称为主表。也就是如下图所示。
②配置settings.py文件中的数据库为mysql。
③收集models.py中的变化,
并同步至数据库中。
4、查看mysql数据库,发现除了定义的article表(默认的表名是APP名_模型)和publication表外,多生成一个article_pub,这个就是由多对多关系自动生成的中间表。
打开查看,发现它是根据article表的主键和publication表的主键生成的。
5、编写urls.py
6、编写views.py,进行数据添加。
对于一对一和一对多:我们只需先添加主表的数据,再添加从表的数据就可以了。
而对于多对多:我们需要先分别添加两个表的数据,然后再进行关联。
那么如何关联出版社和文章的关系呢?添加如下代码
完整代码:
from .models import *
from django.http import HttpResponse
def index(request):
# 添加
# 一对一和一对多:先添加主表的数据,再添加从表的数据;
# 多对多:先分别添加两个表的数据,然后再进行关联。
p1=Publiaction(p_name='新华出版社')
p1.save()
p2=Publiaction(p_name='东方出版社')
p2.save()
a1=Article(a_name='个税改革')
a1.save()
a2=Article(a_name='大桥通车')
a2.save()
# 关联文章和出版社的关系
# a1这个文章对应的出版社是p1和p2,意思就是p1和p2这两个出版社都出版了a1这个文章。
a1.pub.add(p1,p2)
a2.pub.add(p2)
return HttpResponse('数据添加成功')
7、接下来运行项目,访问这个地址。把数据添加至数据库中。
查看数据库中的表记录。
article表。
publication表。
由article表和publication表自动生成的中间表。
8、查询数据。
①根据主表数据查询从表数据
修改views.py中的index函数。
# 查询"东方出版社"的出版过的所有文章
def index(request):
p1=Publiaction.objects.get(id=2) # 查询东方出版社
articles=p1.article_set.all()
for article in articles:
print(article.a_name)
return HttpResponse('数据查询成功')
刷新查看:
此时控制台会打印出如下内容:
②根据从表数据查询主表数据。
继续修改index函数。
# 查询"个税改革"这个文章共有几个出版社出版
def index(request):
a1=Article.objects.get(id=1) # 查询个税改革这篇文章
pubs=a1.pub.all()
for p in pubs:
print(p.p_name)
return HttpResponse('数据查询成功')
刷新查看:
如此,就实现了ORM多对多关系的建立与查询。