Django 对模型创建的两表插入数据

1,添加模型

Test/app8/models.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/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.")


from django.shortcuts import render
from django.http import HttpResponse
from .models import Person, Passport
import datetime


def add_data(request):
    if request.method == 'POST':
        name = request.POST.get('name')
        age = request.POST.get('age')
        passport_number = request.POST.get('passport_number')
        issue_date = request.POST.get('issue_date')

        person = Person(name=name, age=age)
        person.save()

        passport = Passport(person=person, passport_number=passport_number, issue_date=datetime.datetime.strptime(issue_date, '%Y-%m-%d').date())
        passport.save()

        return HttpResponse("数据已成功保存!")

    else:
        return render(request, '8\insert_data.html')

4,添加html代码

Test/templates/8/insert_data.html

复制代码
<!DOCTYPE html>
<html>
<head>
    <title>插入数据</title>
</head>
<body>
    <form method="post">
        {% csrf_token %}
        <label for="name">姓名:</label><br>
        <input type="text" id="name" name="name"><br>
        <label for="age">年龄:</label><br>
        <input type="text" id="age" name="age"><br>
        <label for="passport_number">护照号码:</label><br>
        <input type="text" id="passport_number" name="passport_number"><br>
        <label for="issue_date">发行日期:</label><br>
        <input type="date" id="issue_date" name="issue_date"><br>
        <input type="submit" value="提交">
    </form>
</body>
</html>

5,访问页面

http://127.0.0.1:8000/app8/add_data/

复制代码
<!DOCTYPE html>
<html>
<head>
    <title>插入数据</title>
</head>
<body>
    <form method="post">
        {% csrf_token %}
        <label for="name">姓名:</label><br>
        <input type="text" id="name" name="name"><br>
        <label for="age">年龄:</label><br>
        <input type="text" id="age" name="age"><br>
        <label for="passport_number">护照号码:</label><br>
        <input type="text" id="passport_number" name="passport_number"><br>
        <label for="issue_date">发行日期:</label><br>
        <input type="date" id="issue_date" name="issue_date"><br>
        <input type="submit" value="提交">
    </form>
</body>
</html>

可以看到插入的数据成功落库了

相关推荐
pp-周子晗(努力赶上课程进度版)14 分钟前
【MySQL】视图、用户管理、MySQL使用C\C++连接
数据库·mysql
斯特凡今天也很帅23 分钟前
clickhouse常用语句汇总——持续更新中
数据库·sql·clickhouse
超级小忍2 小时前
如何配置 MySQL 允许远程连接
数据库·mysql·adb
吹牛不交税2 小时前
sqlsugar WhereIF条件的大于等于和等于查出来的坑
数据库·mysql
hshpy2 小时前
setting up Activiti BPMN Workflow Engine with Spring Boot
数据库·spring boot·后端
文牧之3 小时前
Oracle 审计参数:AUDIT_TRAIL 和 AUDIT_SYS_OPERATIONS
运维·数据库·oracle
篱笆院的狗3 小时前
如何使用 Redis 快速实现布隆过滤器?
数据库·redis·缓存
洛神灬殇4 小时前
【LLM大模型技术专题】「入门到精通系列教程」基于ai-openai-spring-boot-starter集成开发实战指南
网络·数据库·微服务·云原生·架构
小鸡脚来咯4 小时前
redis分片集群架构
数据库·redis·架构
christine-rr5 小时前
征文投稿:如何写一份实用的技术文档?——以软件配置为例
运维·前端·网络·数据库·软件构建