You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django数据库写入操作示例及实现方法求助

Django 数据库写入操作示例与指南

一、基础数据写入(创建新对象)

先定义一个示例模型,后续操作都基于此:

# models.py
from django.db import models

class Article(models.Model):
    title = models.CharField(max_length=200)
    content = models.TextField()
    pub_date = models.DateTimeField(auto_now_add=True)

方式1:实例化后手动保存

# 视图或脚本中调用
from .models import Article
from datetime import datetime

# 创建模型实例
new_article = Article(
    title="Django写入数据库示例",
    content="这是一篇演示数据写入的文章",
    pub_date=datetime.now()
)
# 保存到数据库
new_article.save()

方式2:使用create()方法一步完成

Article.objects.create(
    title="快速创建文章",
    content="此方法无需手动调用save()"
)

二、更新现有数据

方式1:获取对象后修改字段再保存

# 根据ID获取目标对象
article = Article.objects.get(id=1)
# 修改字段值
article.title = "更新后的标题"
article.content = "更新后的文章内容"
# 提交修改到数据库
article.save()

方式2:使用update()高效更新(支持单条/批量)

# 单条更新
Article.objects.filter(id=1).update(title="批量更新的标题")

# 批量更新(给所有标题含"示例"的文章加标记)
from django.db.models import F
Article.objects.filter(title__contains="示例").update(title=F('title') + "【已更新】")

三、通过用户表单输入写入数据库

这是最常见的用户交互场景,用Django Form处理:

1. 定义表单类

# forms.py
from django import forms
from .models import Article

class ArticleForm(forms.ModelForm):
    class Meta:
        model = Article
        fields = ['title', 'content']  # 指定需要用户输入的字段

2. 视图处理表单提交

# views.py
from django.shortcuts import render, redirect
from .forms import ArticleForm

def create_article(request):
    if request.method == 'POST':
        # 将POST数据绑定到表单
        form = ArticleForm(request.POST)
        if form.is_valid():  # 验证数据合法性
            form.save()  # 直接保存到数据库
            return redirect('article_list')  # 跳转到文章列表页
    else:
        # GET请求时生成空表单
        form = ArticleForm()
    return render(request, 'create_article.html', {'form': form})

3. 模板渲染表单

<!-- templates/create_article.html -->
<form method="post">
    {% csrf_token %}  <!-- Django强制要求的CSRF防护 -->
    {{ form.as_p }}  <!-- 自动渲染表单字段为段落格式 -->
    <button type="submit">提交文章</button>
</form>

四、基于计算结果写入数据库

比如根据用户输入数值计算后保存结果:

1. 定义计算记录模型

# models.py
class CalculationRecord(models.Model):
    num1 = models.IntegerField()
    num2 = models.IntegerField()
    result = models.IntegerField()
    created_at = models.DateTimeField(auto_now_add=True)

2. 视图处理计算与保存

# views.py
from django.shortcuts import render, redirect
from .models import CalculationRecord

def calculate(request):
    if request.method == 'POST':
        num1 = int(request.POST.get('num1'))
        num2 = int(request.POST.get('num2'))
        result = num1 + num2  # 替换为你的业务计算逻辑
        
        # 保存计算结果到数据库
        CalculationRecord.objects.create(
            num1=num1,
            num2=num2,
            result=result
        )
        return redirect('calculation_history')  # 跳转到历史记录页
    return render(request, 'calculate.html')

3. 计算页面模板

<!-- templates/calculate.html -->
<form method="post">
    {% csrf_token %}
    <input type="number" name="num1" placeholder="输入第一个数" required>
    <input type="number" name="num2" placeholder="输入第二个数" required>
    <button type="submit">计算并保存</button>
</form>

关键注意事项

  • 数据验证:无论手动写入还是表单输入,都要验证数据合法性,避免脏数据进入数据库
  • CSRF防护:处理POST请求时必须在表单中加入{% csrf_token %},否则会被Django拦截
  • 事务处理:多步数据库操作时,用transaction.atomic()确保数据一致性:
from django.db import transaction

with transaction.atomic():
    # 此块内的操作要么全部成功,要么全部回滚
    article = Article.objects.create(title="事务测试", content="事务内操作")
    CalculationRecord.objects.create(num1=10, num2=20, result=30)

内容的提问来源于stack exchange,提问作者arennuit

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 11:42:23