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
相关产品推荐
相关产品推荐

