如何将request.POST.get()获取的多组数据存入form.save()?
Django表单保存question/answer/explain字段的正确方式
情况1:使用ModelForm(推荐,适用于关联数据库模型的场景)
首先确保你的addform继承自ModelForm,并且包含question、answer、explain三个字段:
from django import forms from .models import YourModel # 替换成你实际的模型类 class addform(forms.ModelForm): class Meta: model = YourModel fields = ['question', 'answer', 'explain'] # 明确指定要处理的字段
然后修改视图函数——不需要手动从request.POST提取数据,表单初始化时已自动加载POST数据,验证通过后直接调用save()即可完成保存:
def example(request): form = addform() if request.method == 'POST': form = addform(request.POST) if form.is_valid(): form.save() # 自动将question、answer、explain保存到数据库 # 可选:保存后重定向到其他页面,避免重复提交 # return redirect('your_target_url_name') context = {'form': form} return render(request, 'Example_fragenkatalog.html', context)
情况2:使用普通Form(无模型关联时)
如果addform是普通Form类,需要从表单的cleaned_data中提取验证后的数据,再手动创建模型实例并保存:
首先定义表单:
from django import forms class addform(forms.Form): question = forms.CharField(label="问题", max_length=200) answer = forms.CharField(label="答案", widget=forms.Textarea) explain = forms.CharField(label="解析", widget=forms.Textarea)
对应的视图修改:
def example(request): form = addform() if request.method == 'POST': form = addform(request.POST) if form.is_valid(): # 从cleaned_data取验证后的数据,比直接request.POST.get更安全 question = form.cleaned_data['question'] answer = form.cleaned_data['answer'] explain = form.cleaned_data['explain'] # 创建模型实例并保存 YourModel.objects.create( question=question, answer=answer, explain=explain ) context = {'form': form} return render(request, 'Example_fragenkatalog.html', context)
关键说明
- 不要手动用
request.POST.get()提取数据后闲置,要么用表单的cleaned_data(验证后更安全),要么让ModelForm自动处理。 - 必须通过
is_valid()验证表单,跳过验证直接保存可能导致非法数据存入数据库。
内容的提问来源于stack exchange,提问作者replaalpi
相关产品推荐
相关产品推荐

