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.mzph.cn/web/37838.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据资产安全策略的定制化之道:深入了解各企业独特需求,量身打造个性化的数据资产保护方案,确保数据安全无虞,助力企业稳健发展

目录 一、引言 二、企业数据资产安全现状分析 &#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;我们只需要将…

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…

淘系-万相台无界实操运营课:淘系 付费工具课(40节课)

课程目录 01_万相台无界系统性忖费推广思维.mp4 02_万相台无界七大推广场景详解.mp4 03关键词推广计划之标准计划搭建技巧.mp4 04_关键词推广之智能计划推广技巧.mp4 05_关键词推广之趋势选品计划推广技巧.mp4 06关键词推广之智能选品计划推广技巧.mp4 07_非标品的关键词…

待办工作如何在桌面分区显示

在现代快节奏的工作环境中&#xff0c;我们每天都要处理大量的待办事项。面对这些繁多的事项&#xff0c;很多人常常感到无从下手&#xff0c;导致工作任务堆积&#xff0c;影响工作效率。那么&#xff0c;如何在繁杂的事项中保持清晰&#xff0c;让工作更有条理呢&#xff1f;…

旋转变压器软件解码simulink仿真

1.介绍 旋转变压器是一种精密的位置、速度检测装置&#xff0c;尤其适用于高温、严寒、潮湿、高速、振动等环境恶劣、旋转编码器无法正常工作的场合。旋转变压器在使用时并不能直接提供角度或位置信息&#xff0c;需要特殊的激励信号和解调、计算措施&#xff0c;才能将旋转变压…

Hamster (CHO) PLBL2 ELISA Kit—仓鼠(CHO) PLBL2 ELISA试剂盒

宿主细胞蛋白&#xff08;HCP&#xff09;是生物制药过程中产生的一类主要杂质&#xff0c;是重组疫苗及重组抗体类药物的重要质控指标。虽然大部分HCP可以在早期的纯化步骤中除去&#xff0c;但是仍有一些HCP会通过纯化系统携带&#xff0c;可以躲过常规HCP ELISA检测。ICL的H…

RedHat9 | podman容器-续集

一、管理容器存储和网络资源 使用容器来运行简单的进程&#xff0c;然后退出。可以配置容连续运行特定服务&#xff0c;如数据库服务。如果持续运行服务&#xff0c;需要向容器添加更多的资源&#xff0c;如持久存储或对其他网络的访问权限。 针对企业容器平台上的大型部署&a…

为Ubuntu-24.04-live-server-amd64磁盘扩容

系列文章目录 Ubuntu-24.04-live-server-amd64安装界面中文版 文章目录 系列文章目录前言一、检查系统本身情况1.用 lsblk 命令查看自己系统磁盘是什么状态2.用 df -h 命令查看文件系统的磁盘空间使用情况3.解决 Ubuntu-24.04 磁盘空间只能用一半的问题3-1扩展逻辑卷&#xff…

这才是CSDN最系统的网络安全学习路线(建议收藏)

01 什么是网络安全 网络安全可以基于攻击和防御视角来分类&#xff0c;我们经常听到的 “红队”、“渗透测试” 等就是研究攻击技术&#xff0c;而“蓝队”、“安全运营”、“安全运维”则研究防御技术。 无论网络、Web、移动、桌面、云等哪个领域&#xff0c;都有攻与防两面…

基于X86+FPGA+AI的智能仓储AGV机器人解决方案

应用场景 智能仓储是物流过程的一个环节&#xff0c;智能仓储的应用&#xff0c;保证了货物仓库管理各个环节数据输入的速度和准确性&#xff0c;确保企业及时准确地掌握库存的真实数据&#xff0c;合理保持和控制企业库存&#xff0c;其中搬运环节目前已大量采用AGV的方式进行…

python-逻辑语句

if else语句 不同于C&#xff1a;else if range语句&#xff1a; continue continue的作用是&#xff1a; 中断所在循环的当次执行&#xff0c;直接进入下一次 continue在嵌套循环中的应用 break 直接结束所在的循环 break在嵌套循环中的应用 continue和break&#xff0c;在…

星火认知大模型Spark3.5 api调用 #AI夏令营 #Datawhale #夏令营

环境安装 pip install --upgrade -q spark_ai_python 官网注册 链接&#xff1a;https://console.xfyun.cn/app/myapp 官方会在报名成功后&#xff0c;立即发放星火大模型 Spark Max的 API 额度助力我们完成赛事&#xff0c; 200w Tokens 任你花&#xff01; 暑期有四场夏令营…

HDC Cloud 2024 | CodeArts加速软件智能化开发,携手HarmonyOS重塑企业应用创新体验

2024年6月21~23日&#xff0c;华为开发者大会HDC 2024在东莞溪流背坡村隆重举行。期间华为云主办了以“CodeArts加速软件智能化开发&#xff0c;携手HarmonyOS重塑企业应用创新体验”为主题的分论坛。论坛汇聚了各行各业的专家学者、技术领袖和开发者&#xff0c;共同探讨Harmo…

养殖自动化管理系统:开启智慧养殖新篇章

在现代农业的快速演进中&#xff0c;养殖业正经历一场前所未有的技术革命。养殖自动化管理系统&#xff0c;作为这场变革的前沿科技&#xff0c;正逐步成为推动行业高效、环保、可持续发展的关键力量。本文将深入探讨自动化养殖系统如何通过精准管理、智能监控、数据驱动决策&a…