Django之ORM表之间的外键关联与多对多关系-创新互联
实现环境表结构:
成都创新互联公司是专业的玉林网站建设公司,玉林接单;提供成都网站制作、成都网站建设、外贸营销网站建设,网页设计,网站设计,建网站,PHP网站建设等专业做网站服务;采用PHP框架,可快速的进行玉林网站开发网页制作和功能扩展;专业做搜索引擎喜爱的网站,专业的做网站团队,希望更多企业前来合作!models.py表单创建与代码
from django.db import models
# Create your models here.
class Publisher(models.Model):
id = models.AutoField(primary_key=True)
name = models.CharField(max_length=64,null=False,unique=True)
def __str__(self):
return "publisher_name:{}".format(self.name)
class Book(models.Model):
id = models.AutoField(primary_key=True)
title = models.CharField(max_length=128,null=False)
publisher = models.ForeignKey(to=Publisher) #外键关联
def __str__(self):
return "book_title:{}".format(self.title)
class Author(models.Model):
id = models.AutoField(primary_key=True)
name = models.CharField(max_length=16,null=False)
book = models.ManyToManyField(to="Book") #跟BOOK多对多关系
def __str__(self):
return "author_name:{}".format(self.name)
两个HTML文件(book.html与author.html)
重点:查询author表,通过多对多的关系author_book这个表的基础,查找出书的名称。
重点:通过book表的外键关联,查询出该书的出版社名称。
views.py处理函数
from ldap3 import Server, Connection, ALL, SUBTREE, ServerPool
from django.shortcuts import HttpResponse,render,redirect
from ormtest import models
import pymysql
from django.views import View
# Create your views here.
def author_list(request):
# author = models.Author.objects.get(id=1)
# print(author.book.all())
all_author = models.Author.objects.all()
return render(request,"author.html",{"author_list":all_author})
def book_list(request):
all_book = models.Book.objects.all()
return render(request,"book.html",{"book_list":all_book})
展示效果
Author跟Book表多对多关系的增删改查方法
1、增加作者,并添加相应的书籍
相应函数功能
def add_author(request):
if request.method == "POST":
new_author_name = request.POST.get("author_name")
#getlist方法,获取所有选择的书籍
books = request.POST.getlist("books")
#创建一个新的作者
new_author_obj = models.Author.objects.create(name=new_author_name)
#为该作者添加相应的关系书籍,为在author_book表中添加相应的记录
new_author_obj.book.set(books)
return HttpResponse("添加作者成功!")
all_book = models.Book.objects.all()
return render(request,"add_author.html",{"book_list":all_book})
return HttpResponse("OK")
相应的html代码
展示效果:
2、删除作者代码:
def del_author(request):
#从URL值取到要删除的作者id
delete_id = request.GET.get("id")
print(delete_id)
#根据ID值取到要删除的对象,直接删除
#1、去作者和书的关联表,把对应的关联记录删除
#2、去作者表把作者删除
models.Author.objects.get(id=delete_id).delete()
return redirect("/ormtest/author/")
3、编辑作者
def edit_author(request):
if request.method =="POST":
#拿到提交过来的编辑后的数据
edit_author_id = request.POST.get("author_id")
new_author_name = request.POST.get("author_name")
#拿到编辑后作者关联的书籍信息
new_books = request.POST.getlist("books")
#根据ID找到当前编辑的作者对象
edit_author_obj = models.Author.objects.get(id=edit_author_id)
#更新作者名字
edit_author_obj.name = new_author_name
#更新作者关联的书的对应关系
edit_author_obj.book.set(new_books)
#将修改提交到数据库
edit_author_obj.save()
#返回作者列表页,查看是否编辑成功
return redirect("/ormtest/author/")
#html展示效果如添加页面同样
另外有需要云服务器可以了解下创新互联cdcxhl.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。
新闻名称:Django之ORM表之间的外键关联与多对多关系-创新互联
转载源于:http://hbruida.cn/article/ccojph.html