站在用戶的角度思考問題,與客戶深入溝通,找到城東網站設計與城東網站推廣的解決方案,憑借多年的經驗,讓設計與互聯(lián)網技術結合,創(chuàng)造個性化、用戶體驗好的作品,建站類型包括:網站制作、做網站、企業(yè)官網、英文網站、手機端網站、網站推廣、域名申請、虛擬主機、企業(yè)郵箱。業(yè)務覆蓋城東地區(qū)。
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) #外鍵關聯(lián)
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)
重點:查詢author表,通過多對多的關系author_book這個表的基礎,查找出書的名稱。
重點:通過book表的外鍵關聯(lián),查詢出該書的出版社名稱。
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})
相應函數功能
def add_author(request):
if request.method == "POST":
new_author_name = request.POST.get("author_name")
#getlist方法,獲取所有選擇的書籍
books = request.POST.getlist("books")
#創(chuàng)建一個新的作者
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代碼
<body>
<form action="/ormtest/add_author/" method="post">
<p>
作者姓名:<input type="text" name="author_name">
</p>
<p>
作品:
<select multiple name="books">
{% for book in book_list %}
<option value="{{ book.id }}">{{ book.title }}</option>
{% endfor %}
</select>
</p>
<p>
<input type="submit" value="提交">
</p>
</form>
</body>
展示效果:
def del_author(request):
#從URL值取到要刪除的作者id
delete_id = request.GET.get("id")
print(delete_id)
#根據ID值取到要刪除的對象,直接刪除
#1、去作者和書的關聯(lián)表,把對應的關聯(lián)記錄刪除
#2、去作者表把作者刪除
models.Author.objects.get(id=delete_id).delete()
return redirect("/ormtest/author/")
def edit_author(request):
if request.method =="POST":
#拿到提交過來的編輯后的數據
edit_author_id = request.POST.get("author_id")
new_author_name = request.POST.get("author_name")
#拿到編輯后作者關聯(lián)的書籍信息
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
#更新作者關聯(lián)的書的對應關系
edit_author_obj.book.set(new_books)
#將修改提交到數據庫
edit_author_obj.save()
#返回作者列表頁,查看是否編輯成功
return redirect("/ormtest/author/")
#html展示效果如添加頁面同樣
文章名稱:Django之ORM表之間的外鍵關聯(lián)與多對多關系
當前鏈接:http://aaarwkj.com/article28/ijpccp.html
成都網站建設公司_創(chuàng)新互聯(lián),為您提供小程序開發(fā)、面包屑導航、App開發(fā)、ChatGPT、定制開發(fā)、電子商務
聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)