表之间数据的一对多关系: 一篇文章可以在多个出版社出版, 一个出版社可以出版多篇文章
一: 建立一个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('')