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

如何从Django表单获取数据并在用户每次提交时存储到不同变量

在Django中每次提交表单时将数据存入不同变量的方法

我来给你梳理下两种常见的实现方式,你可以根据自己的实际需求来选:

场景1:单次提交内把表单数据存入多个变量

如果是想在用户一次提交表单后,把post字段的数据赋值给多个用途不同的变量(比如处理成不同格式),可以这么做:

首先先定义你的表单:

# forms.py
from django import forms

class PostForm(forms.Form):
    post = forms.CharField(label='提交内容', max_length=500)

然后在视图里处理表单提交,获取数据并分配给不同变量:

# views.py
from django.shortcuts import render
from .forms import PostForm

def submit_post(request):
    if request.method == 'POST':
        form = PostForm(request.POST)
        # 先验证表单数据合法性
        if form.is_valid():
            # 从cleaned_data里取数据,这是Django推荐的安全方式
            post_content = form.cleaned_data['post']
            
            # 根据你的需求赋值给不同变量
            raw_content = post_content  # 存原始内容
            upper_content = post_content.upper()  # 存转成大写的内容
            preview_content = post_content[:100] + '...'  # 存预览版内容
            
            # 接下来你可以用这些变量做任何操作,比如渲染到模板里
            context = {
                'raw': raw_content,
                'upper': upper_content,
                'preview': preview_content
            }
            return render(request, 'result.html', context)
    else:
        # GET请求时显示空表单
        form = PostForm()
    
    return render(request, 'submit_form.html', {'form': form})

场景2:多次提交时,每次数据存入不同的"变量"(保存历史提交)

如果是想让用户每次提交的post数据都单独存起来(比如像历史记录一样,第一次提交存到第一个"变量",第二次存到第二个),可以用会话(session)或者数据库来实现:

用Session临时保存(适合不需要永久存储的情况)

# views.py
from django.shortcuts import render
from .forms import PostForm

def submit_post(request):
    # 初始化会话里的提交列表,不存在就创建一个空列表
    if 'post_history' not in request.session:
        request.session['post_history'] = []
    
    if request.method == 'POST':
        form = PostForm(request.POST)
        if form.is_valid():
            post_content = form.cleaned_data['post']
            # 把本次提交的内容添加到历史列表里
            request.session['post_history'].append(post_content)
            # 必须设置modified=True,不然会话不会保存修改
            request.session.modified = True
            
            # 现在历史列表里的每个元素就是每次提交的"变量",比如第一个提交是post_history[0],第二个是post_history[1]
            context = {
                'form': form,
                'all_submissions': request.session['post_history'],
                'last_submission': request.session['post_history'][-1]  # 取最后一次提交
            }
            return render(request, 'submit_form.html', context)
    else:
        form = PostForm()
    
    context = {
        'form': form,
        'all_submissions': request.session.get('post_history', [])
    }
    return render(request, 'submit_form.html', context)

用数据库永久保存(适合需要长期留存数据的情况)

先定义一个模型来存储提交记录:

# models.py
from django.db import models

class PostSubmission(models.Model):
    content = models.TextField()
    submitted_at = models.DateTimeField(auto_now_add=True)  # 自动记录提交时间

    def __str__(self):
        return self.content[:20] + '...'

然后在视图里每次提交时创建模型实例:

# views.py
from django.shortcuts import render
from .forms import PostForm
from .models import PostSubmission

def submit_post(request):
    if request.method == 'POST':
        form = PostForm(request.POST)
        if form.is_valid():
            post_content = form.cleaned_data['post']
            # 创建新的记录存入数据库
            new_submission = PostSubmission(content=post_content)
            new_submission.save()
            
            # 可以获取所有提交记录,每条记录就是一次提交的"变量"
            all_submissions = PostSubmission.objects.all().order_by('-submitted_at')
            
            context = {
                'form': form,
                'all_submissions': all_submissions,
                'new_submission': new_submission
            }
            return render(request, 'submit_form.html', context)
    else:
        form = PostForm()
    
    context = {
        'form': form,
        'all_submissions': PostSubmission.objects.all().order_by('-submitted_at')
    }
    return render(request, 'submit_form.html', context)

关键提醒

  • 永远用form.cleaned_data来获取表单数据,不要直接用request.POST['post'],因为cleaned_data会自动做数据验证和类型转换,能避免很多安全问题和错误。
  • 如果用Session存储,记得设置request.session.modified = True,否则Django不会保存你对会话的修改。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 07:05:00