表之间数据的一对多关系: 一篇文章可以在多个出版社出版, 一个出版社可以出版多篇文章
一: 建立一个app, 在models.py文件中, 创建相关的表
class Publication(models.Model): pname = models.CharField(max_length=50) paddress = models.CharField(max_length=100) class Meta: db_table = 'publication' class Article(models.Model): title = models.CharField(max_length=100) author = models.CharField(max_length=20) # 绑定多对多关系,ManyToManyField() publication = models.ManyToManyField(Publication) class Meta: db_table = 'article'
关键字: ManyToManyField
二: 在views.py文件中, 对表进行操作
from django.shortcuts import render,HttpResponse from .models import Publication,Article # Create your views here. def add(request): p1 = Publication(pname='新华社',paddress='北京') p1.save() p2 = Publication(pname='人民出版社', paddress='北京') p2.save() p3 = Publication(pname='清华出版社', paddress='北京') p3.save() p4 = Publication(pname='蓝翔出版社', paddress='山东') p4.save() a1 = Article(title='python教程',author='张三') a1.save() a2 = Article(title='java教程',author='李四') a2.save() a3 = Article(title='php教程',author='王五') a3.save() a4 = Article(title='HTML教程',author='赵四') a4.save() a5 = Article(title='Javascript教程',author='刘能') a5.save() # 如果是多对多关系,一定要将两张表中的数据保存成功后,在关联中间表 # add使用add函数,中间表中添加记录 # 如果是多对多关系,一定要将两张表中的数据保存成功后,在关联中间表 # add使用add函数,中间表中添加记录 # 如果是多对多关系,一定要将两张表中的数据保存成功后,在关联中间表 # add使用add函数,中间表中添加记录 # add添加对应的出版社 a1.publication.add(p1,p2) a1.publication.add(p3) a2.publication.add(p2,p3,p4) a3.publication.add(p3,p4) a4.publication.add(p1,p4) a5.publication.add(p1,p2,p3,p4) return HttpResponse('成功........') def select(request): # 1.根据article对象,查询publication模型对象数据 a1 = Article.objects.get(id=3) # 获取publication模型对象 # 获取这篇文章对应的所有出版社 res = a1.publication.all() for r in res: # r就是一个出版,获取出版社出版的所有文章 ares = r.article_set.all() # 循环遍历该出版社出版的每一篇文章 for re in ares: print(r.pname,re.title ) # 2.根据Pubilcation对象查询该出版社出版的article对象数据 p1 = Publication.objects.get(id=3) res = p1.article_set.all() for r in res: # 每一个r就是一篇文章 print(r.title,r.author) return HttpResponse('///////') def delete(request): # a = Article.objects.get(id=4) res = a.publication.all() for r in res: # 解除数据之间的关联 a.publication.remove(r) # 删除对应的数据 a.delete() return HttpResponse('////')