Django 一对一关系

news2024/10/5 17:18:40

作用:

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

1,添加表模型

Test/app8/views.py
from django.db import models

class 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.username


class Person(models.Model):
    name = models.CharField(max_length=100)
    age = models.IntegerField()

    def __str__(self):
        return self.name

class 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.py

import 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 User


def 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, Passport

def 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 views


urlpatterns = [
    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博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1889885.html

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

相关文章

程序员AI提效案例:统计B站课程耗时情况

文章目录 一&#xff0c;时长统计需求二&#xff0c;一波三折三&#xff0c;终极方案 AIJava总结 今天为了写一篇博客&#xff0c;这篇博客介绍了B站的一个Java项目&#xff0c;这个项目分为三个阶段&#xff1a; 初级篇高级篇运维篇 一&#xff0c;时长统计需求 我想根据每个…

软件测试中安全测试包含内容及安全测试怎么测

一、软件测试安全测试包含哪些 1. 漏洞扫描 漏洞扫描是软件测试安全测试的基础&#xff0c;它用于检测应用程序和系统中存在的已知漏洞。安全测试工具如AppScan、OWASP ZAP和Nessus等可以对应用程序进行自动化扫描&#xff0c;发现可能存在的漏洞&#xff0c;如跨站点脚本&am…

大象机器人开源协作机械臂机械臂接入GPT4o大模型!

本文已经或者同济子豪兄作者授权对文章进行编辑和转载 引言 随着人工智能和机器人技术的快速发展&#xff0c;机械臂在工业、医疗和服务业等领域的应用越来越广泛。通过结合大模型和多模态AI&#xff0c;机械臂能够实现更加复杂和智能化的任务&#xff0c;提升了人机协作的效率…

CTO透露GPT-5内幕,OpenAI 以36亿美元收购数据库初创公司

目录 01 GPT-5 02 OpenAI收购Rockset 2.1 谁是Rockset&#xff1f; 2.2 OpenAI的目的是什么&#xff1f; 01 GPT-5 虽然GPT-4的视频通话功能尚未全面推广&#xff0c;但OpenAI的CTO已经对即将到来的GPT-5给出了新的暗示。 不久前&#xff0c;Mira回到母校达特茅斯工程学…

jdk动态代理-基于反射的动态代理

JDK动态代理的示例图&#xff0c;下图的绿色箭头表示实现的关系&#xff0c;白色虚线表示依赖关系&#xff0c;target表示被ProxyFactory的target成员表示代理类对象&#xff0c;由ProxyFactory传入的Object参数初始化&#xff0c;接着调用getProxyInstance函数利用反射来返回代…

DMA学习笔记

参考文章 https://blog.csdn.net/as480133937/article/details/104927922 DMA简介 DMA&#xff0c;全称Direct Memory Access&#xff0c;即直接存储器访问。DMAC 即 DMA 控制器&#xff0c;提供了一种硬件的数据传输方式&#xff0c;无需 CPU 的介入&#xff0c;可以处理外…

LangGraph进阶:手把手教你打造电影脚本AI

LangGraph是著名的大模型开发框架LangChain推出的用于构建基于复杂工作流的LLM应用的开发库。LangGraph把任务的节点与关系用Graph结构来定义以支持更多样更复杂的应用场景&#xff0c;特别是&#xff1a; 实现包含循环、迭代等复杂工作流的高级RAG范式 需要更灵活控制的Agent…

QAM MMA

MMA是改进的CMA&#xff0c;有RCA和CMA的优点&#xff0c;还能对相位误差进行修正。 N 5e5; % 仿真符号数 M 16; % QAM16msg randi([0 M-1],N,1); % 产生随机符号 tx qammod(msg,M); % QAM调制test_snr 20:5:30; …

采用Java语言+开发工具 Idea+ scode数字化产科管理平台源码,产科管理新模式

采用Java语言开发工具 Idea scode数字化产科管理平台源码&#xff0c;产科管理新模式 数字化产科管理系统是现代医疗信息化建设的重要组成部分&#xff0c;它利用现代信息技术手段&#xff0c;对孕产妇的孕期管理、分娩过程及产后康复等各个环节进行数字化、智能化管理&#xf…

【总线】AXI4第七课时:AXI的额外的控制信息(PROT和CACHE)

大家好,欢迎来到今天的总线学习时间!如果你对电子设计、特别是FPGA和SoC设计感兴趣&#xff0c;那你绝对不能错过我们今天的主角——AXI4总线。作为ARM公司AMBA总线家族中的佼佼者&#xff0c;AXI4以其高性能和高度可扩展性&#xff0c;成为了现代电子系统中不可或缺的通信桥梁…

安乃达挂牌上交所:营收放缓净利润下滑,业绩风险如何规避?

《港湾商业观察》施子夫 7月3日&#xff0c;冲刺上交所主板刚满2年的安乃达驱动技术&#xff08;上海&#xff09;股份有限公司&#xff08;以下简称安乃达&#xff0c;603350.SH&#xff09;将正式挂牌上市。 据悉&#xff0c;此次安乃达公开发行数量为2900万股&#xff0c;…

【雷丰阳-谷粒商城 】【分布式高级篇-微服务架构篇】【18】认证服务02—微博社交登录

持续学习&持续更新中… 守破离 【雷丰阳-谷粒商城 】【分布式高级篇-微服务架构篇】【18】认证服务02—微博社交登录 微博社交登录图示原理前置准备实现流程完整代码 参考 微博社交登录 OAuth&#xff1a; OAuth&#xff08;开放授权&#xff09;是一个开放标准&#xff0…

Python-Tkinter+Logging+Sqlserver项目结合

参考文章&#xff1a; https://www.jb51.net/article/283745.htm 目录&#xff1a; common(文件夹) – base.py – config_reader.py – dosqlserver.py – log.py txt&#xff08;空文件夹&#xff0c;后面会自动生成txt文件在该文件夹下面&#xff09; 1.txt 2.txt env.…

html+js+css美观好看的动态404界面

中间的那一段话&#xff08;root开头的那一句&#xff09;是逐字输出的 那段话显示完后&#xff0c;自动显示超大号字体404 来都来了点个赞&#xff0c;关注一下呗&#x1f604;&#xff0c;本人发誓&#xff1a;你关注我&#xff0c;马上关注你 界面 源码在图片下面…

【ONE·Linux || 高级IO(一)】

总言 主要内容&#xff1a;介绍五种IO模型的基本概念、学习IO多路转接&#xff08;select、poll编程模型&#xff09;。       文章目录 总言1、问题引入1.1、网络通信与IO1.2、五种IO模型1.2.1、举例引入1.2.2、IO模型具体含义介绍1.2.2.1、阻塞式IO1.2.2.2、非阻塞轮询检…

什么是带有 API 网关的代理?

带有 API 网关的代理服务显著提升了用户体验和性能。特别是对于那些使用需要频繁创建和轮换代理的工具的用户来说&#xff0c;使用 API 可以节省大量时间并提高效率。 了解 API API&#xff0c;即应用程序编程接口&#xff0c;是服务提供商和用户之间的连接网关。通过 API 连接…

智能数字人系统的技术难点

数字人系统&#xff0c;也称为智能数字人系统或虚拟数字人系统&#xff0c;是指利用人工智能技术构建的虚拟人物形象&#xff0c;能够与人进行自然交互的系统。数字人系统涉及多项技术&#xff0c;其开发和应用存在以下技术难点。北京木奇移动技术有限公司&#xff0c;专业的软…

KES数据库实践指南:探索KES数据库的事务隔离级别

并发控制 并发控制的重要性 并发控制是数据库管理系统中的一个核心概念&#xff0c;它确保在多用户环境中&#xff0c;对数据库的并发访问不会破坏数据的完整性和一致性。 当多个用户同时对数据库进行读写操作时&#xff0c;如果缺乏有效的并发控制机制&#xff0c;可能会导致数…

HexPlane: A Fast Representation for Dynamic Scenes(总结图)

图1。用于动态三维场景的 Hex刨面。我们没有从深度 MLP 中回归颜色和不透明度&#xff0c;而是通过 HexPlann 显式地计算时空点的特征。配对一个微小的 MLP&#xff0c;它允许以上100倍加速匹配的质量。 图2。方法概述。Hex刨包含六个特征平面&#xff0c;跨越每对坐标轴(例如…

ctfshow web sql注入 web242--web249

web242 into outfile 的使用 SELECT ... INTO OUTFILE file_name[CHARACTER SET charset_name][export_options]export_options:[{FIELDS | COLUMNS}[TERMINATED BY string]//分隔符[[OPTIONALLY] ENCLOSED BY char][ESCAPED BY char]][LINES[STARTING BY string][TERMINATED…