当前位置: 首页 > news >正文

Django 一对一关系

作用:

  • 两个数据库表建立外键关系
  • 当外键表的数据被删除时,主表的数据也会一并删除。

1,添加表模型

Test/app8/views.py
from django.db import modelsclass User(models.Model):username = models.CharField(max_length=50, unique=True)email = models.EmailField(unique=True)password = models.CharField(max_length=128)  # 使用哈希存储密码first_name = models.CharField(max_length=60)last_name = models.CharField(max_length=50)# 添加其他字段,例如:# age = models.IntegerField()# bio = models.TextField()# ...class Meta:db_table = 'users2'def __str__(self):return self.usernameclass Person(models.Model):name = models.CharField(max_length=100)age = models.IntegerField()def __str__(self):return self.nameclass Passport(models.Model):person = models.OneToOneField(Person, on_delete=models.CASCADE)passport_number = models.CharField(max_length=20)issue_date = models.DateField()def __str__(self):return f"{self.passport_number} - {self.person.name}"

2,执行迁移命令

python manage.py makemigrations app8
python manage.py migrate app8

 使用迁移命令会生成Person和Passport两个张模型表,Passport表中生成一个外键,命名为person_id

3,执行测试脚本增加数据库表实例

Test/scripts.py

# create_instances.pyimport os
import django
from datetime import date# 设置 Django 环境
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'Test.settings')
django.setup()from app8.models import Person, Passport# 创建一个 Person 实例
person = Person.objects.create(name="test2", age=30)# 创建一个 Passport 实例,并关联到上面的 Person 实例
passport = Passport.objects.create(person=person, passport_number="A12345678", issue_date=date(2023, 6, 30))# 打印结果
print(f"Created Person: {person.name}, Age: {person.age}")
print(f"Created Passport: {passport.passport_number}, Issue Date: {passport.issue_date}")

分别执行脚本,创建了两条数据 

 

4,添加视图函数

Test/app8/views.py

from django.shortcuts import render
from .models import Userdef create_user(request):if request.method == 'POST':username = request.POST.get('username')email = request.POST.get('email')# ... 获取其他字段的值# 创建用户实例user = User(username=username,email=email,# ... 填充其他字段)user.save()  # 保存到数据库# ... 处理成功或失败的逻辑return render(request, '8/1.html')from django.shortcuts import render, get_object_or_404
from django.http import HttpResponse
from app8.models import Person, Passportdef delete_person(request, person_id):person_to_delete = get_object_or_404(Person, id=person_id)person_to_delete.delete()return HttpResponse("Person and associated Passport have been deleted.")

5,添加路由地址

from django.urls import path
from . import viewsurlpatterns = [path('create_user', views.create_user, name='create_user'),path('delete_person/<int:person_id>/', views.delete_person, name='delete_person'),]

6,访问页面,删除person数据示例

http://127.0.0.1:8000/app8/delete_person/2/

查看数据库,app8_passport,app8_person表,person_id 为2的数据被删除了

 

 通过对比数据可以看到,通过路由传递的person_id为2时,数据库app8_passport表对应的person_id为2的数据被删除了,app8_person表id为2的数据也一并被删除了。

本文已有实现删除数据示例,以下是插入数据,展示数据示例补充内容:

Django 模型创建的两表插入数据-CSDN博客

Django 页面展示模型创建表的数据-CSDN博客

相关文章:

  • 重生之我要学后端100--计算机网络部分概念(持续更新)
  • 小麦TaHRC信息汇总
  • 统计信号处理基础 习题解答11-11
  • web自动化(三)鼠标操作键盘
  • echarts-wordcloud:打造个性化词云库
  • 【Python】成功解决TypeError: ‘float‘ object cannot be interpreted as an integer
  • Pointnet++改进即插即用系列:全网首发GLSA聚合和表示全局和局部空间特征|即插即用,提升特征提取模块性能
  • 苹果AI的国产大模型之争,没有悬念
  • MySQL高级-MVCC- readview介绍
  • 昇思25天学习打卡营第13天 | SSD目标检测
  • [leetcode]beautiful-arrangement. 优美的排列
  • 复旦大学:一个小技巧探测大模型的知识边界,有效消除幻觉
  • Python高速下载及安装的十大必备事项与C++联调
  • CesiumJS【Basic】- #057 绘制纹理填充多边形(Primitive方式)
  • [数据集][目标检测]桥梁检测数据集VOC+YOLO格式1116张1类别
  • .pyc 想到的一些问题
  • 2018以太坊智能合约编程语言solidity的最佳IDEs
  • android 一些 utils
  • ES6, React, Redux, Webpack写的一个爬 GitHub 的网页
  • gulp 教程
  • java B2B2C 源码多租户电子商城系统-Kafka基本使用介绍
  • java取消线程实例
  • PaddlePaddle-GitHub的正确打开姿势
  • Phpstorm怎样批量删除空行?
  • SwizzleMethod 黑魔法
  • Vue.js-Day01
  • vue2.0项目引入element-ui
  • 不上全站https的网站你们就等着被恶心死吧
  • 前端面试之CSS3新特性
  • 用jQuery怎么做到前后端分离
  • 主流的CSS水平和垂直居中技术大全
  • ​ 无限可能性的探索:Amazon Lightsail轻量应用服务器引领数字化时代创新发展
  • ​​​【收录 Hello 算法】10.4 哈希优化策略
  • #1014 : Trie树
  • (C)一些题4
  • (Ruby)Ubuntu12.04安装Rails环境
  • (windows2012共享文件夹和防火墙设置
  • (二)windows配置JDK环境
  • (附源码)基于ssm的模具配件账单管理系统 毕业设计 081848
  • (机器学习-深度学习快速入门)第一章第一节:Python环境和数据分析
  • (学习日记)2024.03.25:UCOSIII第二十二节:系统启动流程详解
  • ***原理与防范
  • *Django中的Ajax 纯js的书写样式1
  • .net core 连接数据库,通过数据库生成Modell
  • .NET Core中的去虚
  • .net 开发怎么实现前后端分离_前后端分离:分离式开发和一体式发布
  • .Net(C#)自定义WinForm控件之小结篇
  • .NET平台开源项目速览(15)文档数据库RavenDB-介绍与初体验
  • .Net下使用 Geb.Video.FFMPEG 操作视频文件
  • ??myeclipse+tomcat
  • [ MSF使用实例 ] 利用永恒之蓝(MS17-010)漏洞导致windows靶机蓝屏并获取靶机权限
  • [【JSON2WEB】 13 基于REST2SQL 和 Amis 的 SQL 查询分析器
  • [AIGC] 解题神器:Python中常用的高级数据结构
  • [DNS网络] 网页无法打开、显示不全、加载卡顿缓慢 | 解决方案
  • [ERROR ImagePull]: failed to pull image k8s.gcr.io/kube-controller-manager失败