Django ModelForm提交后数据未存入数据库 表单无法保存数据
问题原因
以下代码错误导致数据未写入数据库:
- 视图请求判断逻辑错误:
if request == 'POST'写法错误,正确判断方式为request.method == 'POST',这是核心问题,你的POST请求触发后完全没有进入保存逻辑分支,直接返回了空表单,所以出现表单清空但无数据存储的现象。 - 表单保存参数大小写错误:
form.save(Commit=False)中的参数Commit需小写,Django规定该参数名为commit,大写会触发参数不识别错误。 - forms.py缩进错误:
class Meta:下的model和fields属性没有缩进,Python为缩进敏感语言,该错误会导致ModelForm未关联到对应模型,表单校验永远失败。 - 保存成功后缺少重定向:无跳转逻辑时刷新页面会触发重复提交,建议保存后跳转到结果页。
- 补充优化项:models.py中的
__unicode__方法缩进错误,需放在Appear类内部,Django 3.0及以上版本建议替换为__str__方法,避免字符串展示异常。
修复后代码
models.py
from django.db import models Media_Choices = ( ("TV", "TV"), ("Radio", "Radio"), ("Youtube", "Youtube"), ("Podcast", "Podcast"), ) class Appear(models.Model): Show = models.CharField(max_length=100) Media = models.CharField(max_length=30, blank=True, null=True, choices=Media_Choices) Episode = models.IntegerField() Date = models.DateField(max_length=100) Time = models.TimeField(auto_now=False, auto_now_add=False) Producer = models.CharField(max_length=100) Producer_Email = models.EmailField(max_length=254) def __str__(self): return self.Show + ' ' + self.Producer_Email
forms.py
from django import forms from django.forms import ModelForm from .models import Appear class AppsForm(ModelForm): class Meta: model = Appear fields = '__all__'
views.py
from django.shortcuts import redirect, render from .forms import AppsForm def AppS(request): if request.method == 'POST': form = AppsForm(request.POST) if form.is_valid(): Apps = form.save(commit=False) Apps.save() # 保存成功后跳转到结果页 return redirect('results') else: form = AppsForm() return render(request, 'AppsForm.html', {'form': form}) def results(request): return render(request, 'Results.html')
如果跳转报错,检查你的urls.py中是否给results路由配置了name='results'。
内容的提问来源于stack exchange,提问作者Houston Khanyile
相关产品推荐
相关产品推荐

