Django 一對多關系

1,創建 Django 應用

Test/app9

django-admin startapp app9

2,注冊應用

Test/Test/settings.py

3,添加應用路由

Test/Test/urls.py

from django.contrib import admin
from django.urls import path, includeurlpatterns = [path('admin/', admin.site.urls),path('', include('app9.urls')),path('app1/', include('app1.urls')),path('app2/', include('app2.urls')),path('app3/', include('app3.urls')),path('app4/', include('app4.urls')),path('app5/', include('app5.urls')),path('app6/', include('app6.urls')),path('app7/', include('app7.urls')),path('app8/', include('app8.urls')),path('app9/', include('app9.urls')),
]

?4,添加模型

Test/app9/models.py

from django.db import modelsclass Author(models.Model):name = models.CharField(max_length=100)def __str__(self):return self.nameclass Book(models.Model):title = models.CharField(max_length=100)author = models.ForeignKey(Author, on_delete=models.CASCADE, related_name='books')def __str__(self):return self.title

5,注冊模型到admin

Test/app9/admin.py

from django.contrib import admin
from .models import Author, Bookadmin.site.register(Author)
admin.site.register(Book)

5.1 創建超級賬號

python manage.py createsuperuser

按照提示輸入用戶名、郵箱和密碼。

5.2?通過admin管理后臺添加數據

http://127.0.0.1:8000/admin/
http://127.0.0.1:8000/admin/login/?next=/admin/

添加作者

  • 點擊 "Authors"。
  • 點擊右上角的 "Add Author"。
  • 輸入作者名稱,例如 "小強"。
  • 點擊 "Save"。

添加書籍

  • 點擊 "Books"。
  • 點擊右上角的 "Add Book"。
  • 輸入書名,例如 "java入門到棄坑233"。
  • 在 "Author" 字段選擇剛才添加的作者 "小強"。
  • 點擊 "Save"。
  • 重復以上步驟添加更多書籍,例如 "學習msql"。

查看數據庫:

app9_author表,id?為2的作者小強,關聯app9_book表author_id為2的兩本書籍,建立了一對多的關系

5.3 執行py腳本實例化添加數據

Test/populate_data.py

import os
import djangoos.environ.setdefault('DJANGO_SETTINGS_MODULE', 'Test.settings')
django.setup()from app9.models import Author, Book# 清空現有數據
Author.objects.all().delete()
Book.objects.all().delete()# 添加作者和書籍
author1 = Author.objects.create(name="小強")
Book.objects.create(title="Django 從入門到入坑", author=author1)
Book.objects.create(title="pyhton 從入門到入坑", author=author1)author2 = Author.objects.create(name="小龍")
Book.objects.create(title="C++ 從入門到入坑", author=author2)
Book.objects.create(title="java 從入門到入坑", author=author2)print("數據添加成功!")

查看管理臺:

查看數據庫:

6,添加視圖函數

?Test/app9/views.py

from django.shortcuts import render, get_object_or_404
from .models import Author, Bookdef author_list(request):authors = Author.objects.all()return render(request, '9/author_list.html', {'authors': authors})def author_detail(request, author_id):author = get_object_or_404(Author, pk=author_id)return render(request, '9/author_detail.html', {'author': author})

7,添加html代碼

?Test/templates/9/author_list.html

<!DOCTYPE html>
<html>
<head><title>Authors</title>
</head>
<body><h1>Authors</h1><ul>{% for author in authors %}<li><a href="{% url 'author_detail' author.id %}">{{ author.name }}</a></li>{% endfor %}</ul>
</body>
</html>

Test/templates/9/author_detail.html

<!DOCTYPE html>
<html>
<head><title>{{ author.name }}</title>
</head>
<body><h1>{{ author.name }}</h1><h2>Books</h2><ul>{% for book in author.books.all %}<li>{{ book.title }}</li>{% endfor %}</ul><a href="{% url 'author_list' %}">Back to Authors</a>
</body>
</html>

8,添加路由地址

Test/app9/urls.py

from django.urls import path
from . import viewsurlpatterns = [path('authors/', views.author_list, name='author_list'),path('authors/<int:author_id>/', views.author_detail, name='author_detail'),
]

9,訪問頁面

http://127.0.0.1:8000/app9/authors/

?點擊作者小強,可以看到他名下的書籍

10,刪除作者和書籍

10.1?添加刪除視圖函數

Test/app9/views.py

from django.shortcuts import render, get_object_or_404
from .models import Author, Bookdef author_list(request):authors = Author.objects.all()return render(request, '9/author_list.html', {'authors': authors})def author_detail(request, author_id):author = get_object_or_404(Author, pk=author_id)return render(request, '9/author_detail.html', {'author': author})# 刪除書籍
from django.shortcuts import render, redirect, get_object_or_404
from django.contrib import messagesfrom .models import Author, Bookdef delete_author(request, author_id):author = get_object_or_404(Author, pk=author_id)if request.method == 'POST':author.delete()messages.success(request, '作者已成功刪除!')return redirect('author_list')  # 重定向到作者列表視圖return render(request, '9/confirm_delete_author.html', {'author': author})

10.2?添加刪除html模版

Test/templates/9/confirm_delete_author.html

<h1>確認刪除作者</h1>
<p>你確定要刪除 "{{ author.name }}" 嗎?</p>
<form method="POST">{% csrf_token %}<button type="submit">確認刪除</button><a href="{% url 'author_list' %}">取消</a>
</form>

10.3?給列表html添加刪除按鈕

Test/templates/9/author_list.html

<!DOCTYPE html>
<html>
<head><title>Authors</title>
</head>
<body><h1>Authors</h1><ul>{% for author in authors %}<li><a href="{% url 'author_detail' author.id %}">{{ author.name }}</a></li>{% endfor %}</ul><ul>{% for author in authors %}<li>{{ author.name }}<a href="{% url 'delete_author' author.id %}">刪除</a></li>{% endfor %}</ul></body>
</html>

10.4?添加路由地址

Test/app9/urls.py

from django.urls import path
from . import viewsurlpatterns = [path('authors/', views.author_list, name='author_list'),path('authors/<int:author_id>/', views.author_detail, name='author_detail'),path('delete_author/<int:author_id>/', views.delete_author, name='delete_author'),
]

10.5?訪問頁面

?http://127.0.0.1:8000/app9/authors/

對比數據庫刪除前后,可以看到與小強關聯的兩本書,在刪除作者小強后也被一并刪除了。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/37838.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/37838.shtml
英文地址,請注明出處:http://en.pswp.cn/web/37838.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

《每天5分鐘用Flask搭建一個管理系統》 第10章:前端集成

第10章&#xff1a;前端集成 10.1 前端技術概述 前端技術指的是構建Web應用用戶界面所使用的技術&#xff0c;包括HTML、CSS和JavaScript。現代Web開發中&#xff0c;前端框架如React、Vue.js和Angular等被廣泛使用。 10.2 AJAX與Flask的集成 AJAX&#xff08;Asynchronous…

數據資產安全策略的定制化之道:深入了解各企業獨特需求,量身打造個性化的數據資產保護方案,確保數據安全無虞,助力企業穩健發展

目錄 一、引言 二、企業數據資產安全現狀分析 &#xff08;一&#xff09;數據安全風險多樣化 &#xff08;二&#xff09;傳統安全措施難以滿足需求 &#xff08;三&#xff09;企業數據資產安全意識亟待提高 三、定制化數據資產安全策略的重要性 &#xff08;一&#…

natvicat為什么連不上linux上的mysql?

老規矩&#xff0c;廢話不多說&#xff0c;直接上教程。 號外&#xff0c;數據庫管理工具領域的知名品牌Navicat&#xff0c;推出其免費版本——Navicat Premium Lite&#xff0c;用戶可從Navicat官網下載體驗這款軟件。 https://www.navicat.com.cn/download/navicat-premium-…

【HALCON】如何實現hw窗口自適應相機拍照成像的大小

前言 在開發一個噴碼檢測軟件的時候碰到相機成像和hw窗體的大小不一致&#xff0c;hw太小顯示不完全成像的圖片&#xff0c;這使得成像不均勻&#xff0c;現場辨別起來比較不直觀&#xff0c;因此需要對其進行一個調整。 解決 省略掉讀取圖片的環節&#xff0c;我們只需要將…

別再用this.$forceUpdate()了!—性能優化篇

文章目錄 別再用this.$forceUpdate()了&#xff01;—性能優化篇&#x1f388;介紹&#x1f9e8;弊端注意事項 &#x1f386;解決實例 別再用this.$forceUpdate()了&#xff01;—性能優化篇 起因是接手公司之前外包的項目做項目優化&#xff0c;代碼看著一言難盡&#xff0c;…

CGI面試題及參考答案

什么是CGI?它在Web服務器與應用程序之間扮演什么角色? CGI(Common Gateway Interface) 是一種標準協議,它定義了Web服務器與運行在服務器上的外部程序(通常是腳本或應用程序)之間的通信方式。簡單來說,CGI充當了一個橋梁,使得Web服務器能夠將用戶的請求傳遞給后端程序…

ruoyi—cloud 新建模塊+生成代碼

1.復制一個模塊——修改名字 2.打開模塊下的yml文件&#xff0c;修改端口號和名字 &#xff08;1&#xff09;修改一個名字 &#xff08;2&#xff09;打開yml文件 &#xff08;3&#xff09;修改端口號&#xff0c;不要重復 &#xff08;4&#xff09;改名字和模塊一致 3.…

41、web基礎和http協議

web基礎與http協議 一、web web&#xff1a;就是我們所說得頁面&#xff0c;打開網頁展示得頁面。&#xff08;全球廣域網&#xff0c;萬維網&#xff09; world wide webwww 分布式圖形信息系統 http&#xff1a;超文本傳輸協議 https&#xff1a;加密的超文本傳輸協議…

貓凍干可以天天喂嗎?喂凍干前要了解的必入主食凍干榜單

近年來&#xff0c;凍干貓糧因其高品質而備受喜愛&#xff0c;吸引了無數貓主人的目光&#xff0c;對于像我這樣的養貓達人來說&#xff0c;早已嘗試并認可了凍干喂養。然而&#xff0c;對于初入養貓行列的新手們來說&#xff0c;可能會有疑問&#xff1a;什么是凍干貓糧&#…

Qt——界面優化

目錄 QSS 基本語法 QSS 設置方式 指定控件樣式設置 全局樣式設置 文件加載樣式表 Qt Designer 編輯樣式 選擇器 子控件選擇器 偽類選擇器 樣式屬性 盒模型 控件樣式 按鈕 復選框 單選框 輸入框 列表 菜單欄 登錄界面 繪圖 概念 繪制形狀 繪制線段 繪制…

微信換手機號了怎么綁定新手機號?

微信換手機號了怎么綁定新手機號&#xff1f; 1、在手機上找到并打開微信&#xff1b; 2、打開微信后&#xff0c;點擊底部我的&#xff0c;并進入微信設置&#xff1b; 3、在微信設置賬號與安全內&#xff0c;找到手機號并點擊進入&#xff1b; 4、選擇更換手機號&#xff0c…

【代碼隨想錄算法訓練Day52】LeetCode 647. 回文子串、LeetCode 516.最長回文子串

Day51 動態規劃第十三天 LeetCode 647. 回文子串 dp數組的含義&#xff1a;i到j的子串是否是回文的&#xff0c;是的話dp[i][j]1 遞推公式&#xff1a;if(s[i]s[j]) i j 一個元素 是回文的 |i-j|1 兩個元素 是回文的 j-i>1 判斷dp[i1][j-1] 初始化&#xff1a;全部初始化成…

在代理服務器環境中配置pip源的全面指南

引言 Python的包管理工具pip是開發者和系統管理員常用的工具之一&#xff0c;用于安裝和管理Python庫。然而&#xff0c;在某些網絡環境下&#xff0c;如公司內網或某些國家&#xff0c;直接訪問pip默認源可能會受到限制。此外&#xff0c;通過代理服務器訪問可以提高訪問速度…

淘系-萬相臺無界實操運營課:淘系 付費工具課(40節課)

課程目錄 01_萬相臺無界系統性忖費推廣思維.mp4 02_萬相臺無界七大推廣場景詳解.mp4 03關鍵詞推廣計劃之標準計劃搭建技巧.mp4 04_關鍵詞推廣之智能計劃推廣技巧.mp4 05_關鍵詞推廣之趨勢選品計劃推廣技巧.mp4 06關鍵詞推廣之智能選品計劃推廣技巧.mp4 07_非標品的關鍵詞…

MacOS升級指定Python版本的pip

場景&#xff1a; 系統默認是Python2.7&#xff0c;已經通過brew install python3.11 python3.12安裝了多個版本的Python 執行&#xff1a;pip --version pip 24.1 from /Users/mac10.12/Library/Python/3.11/lib/python/site-packages/pip (python 3.11) 用的是Python3.11…

待辦工作如何在桌面分區顯示

在現代快節奏的工作環境中&#xff0c;我們每天都要處理大量的待辦事項。面對這些繁多的事項&#xff0c;很多人常常感到無從下手&#xff0c;導致工作任務堆積&#xff0c;影響工作效率。那么&#xff0c;如何在繁雜的事項中保持清晰&#xff0c;讓工作更有條理呢&#xff1f;…

旋轉變壓器軟件解碼simulink仿真

1.介紹 旋轉變壓器是一種精密的位置、速度檢測裝置&#xff0c;尤其適用于高溫、嚴寒、潮濕、高速、振動等環境惡劣、旋轉編碼器無法正常工作的場合。旋轉變壓器在使用時并不能直接提供角度或位置信息&#xff0c;需要特殊的激勵信號和解調、計算措施&#xff0c;才能將旋轉變壓…

每隔一個小時gc一次的問題

原文地址https://www.cnblogs.com/jiangxinlingdu/p/7581064.html 設置一下這個 -XX:ExplicitGCInvokesConcurrent 或 -XXExplicitGCInvokesConcurrentAndUnloadsClasses 并且檢查一下&#xff0c;并下面的值設置變大 java.rmi.dgc.leaseValue sun.rmi.dgc.client.gcInterv…

EFCore_查詢延遲執行機制及基于此的動態SQL拼接

延遲機制簡述 對實體&#xff08;DbSet&#xff09;執行條件查詢后&#xff0c;對應的SQL未必生成、執行&#xff0c;通常在執行了終結方法SQL才會真正地生成并執行 var books dbContext.Books.Where(e > e.Price > 0); 題外話&#xff1a;EFCore的數據讀取策略是片段…

Hamster (CHO) PLBL2 ELISA Kit—倉鼠(CHO) PLBL2 ELISA試劑盒

宿主細胞蛋白&#xff08;HCP&#xff09;是生物制藥過程中產生的一類主要雜質&#xff0c;是重組疫苗及重組抗體類藥物的重要質控指標。雖然大部分HCP可以在早期的純化步驟中除去&#xff0c;但是仍有一些HCP會通過純化系統攜帶&#xff0c;可以躲過常規HCP ELISA檢測。ICL的H…