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,一经查实,立即删除!

相关文章

《每天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…