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>

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

相关推荐
laowangpython7 分钟前
MySQL基础面试通关秘籍(附高频考点解析)
数据库·mysql·其他·面试
mooyuan天天27 分钟前
SQL注入报错“Illegal mix of collations for operation ‘UNION‘”解决办法
数据库·web安全·sql注入·dvwa靶场·sql报错
运维-大白同学42 分钟前
go-数据库基本操作
开发语言·数据库·golang
R-sz1 小时前
通过从数据库加载MinIO配置并初始化MinioClient,spring boot之Minio上传
数据库·oracle
洛阳泰山1 小时前
Windows系统部署MongoDB数据库图文教程
数据库·windows·mongodb
医只鸡腿子1 小时前
3.2/Q2,Charls最新文章解读
数据库·数据挖掘·数据分析·深度优先·数据库开发
bang___bang_2 小时前
PostgreSQL内幕剖析——结构与架构
数据库·postgresql
龙俊亨2 小时前
达梦数据库查看各数据库表内容
数据库
大叔_爱编程4 小时前
p024基于Django的网上购物系统的设计与实现
python·django·vue·毕业设计·源码·课程设计·网上购物系统
·云扬·4 小时前
【PmHub后端篇】PmHub 中缓存与数据库一致性的实现方案及分析
数据库·缓存