Django表单数据无法保存至数据库及Admin页面展示问题求助
解决Django无法保存用户输入到数据库并在Admin查看的问题
我看了你的代码,核心问题出在模型字段名的大小写不匹配,还有可以简化ModelForm的使用流程,另外别忘了把模型注册到Admin后台。下面一步步帮你解决:
1. 修复字段名大小写不匹配问题
你的models.py里字段是大写开头的Name、Email、Message,但views.py里你用的是小写的obj.name、obj.email、obj.message——Python是大小写敏感的,这会导致赋值失败,数据自然存不进数据库。
推荐方案:统一字段命名(符合PEP8规范)
建议把模型字段改成小写(Django最佳实践是用小写加下划线,比如name、email),这样更规范,也不容易出错。修改models.py:
class query(models.Model): name = models.CharField(max_length=200) email = models.CharField(max_length=200) message = models.CharField(max_length=1500) def __str__(self): return self.name
然后同步修改forms.py里的字段:
class querys(forms.ModelForm): class Meta: model = models.query fields = ['name', 'email', 'message']
2. 简化views.py的保存逻辑
既然用了ModelForm,其实不用手动创建对象再赋值,直接调用form.save()就可以了,代码更简洁也不容易出错。修改后的views.py:
def contact_us(request): if request.method == 'POST': formq = forms.querys(request.POST) if formq.is_valid(): # 直接保存表单数据,不用手动赋值 formq.save() return redirect('index') # 建议用URL名称,比直接传视图函数更鲁棒 else: formq = forms.querys() return render(request, 'home/contact_us.html', {'formq': formq})
小提示:
redirect(index)改成redirect('index')的前提是你在urls.py里给首页视图设置了name='index',这是Django的最佳实践。
3. 注册模型到Admin后台
要在Admin页面看到数据,必须把query模型注册到admin.py里。在你的app目录下的admin.py添加:
from django.contrib import admin from .models import query admin.site.register(query)
4. 最后执行数据库迁移
确保你已经执行了迁移命令,让数据库创建对应的表:
python manage.py makemigrations python manage.py migrate
做完这些步骤后,用户提交的表单数据应该就能正常保存到数据库,并且可以在Admin后台看到了。
内容的提问来源于stack exchange,提问作者Isha Agarwal
相关产品推荐
相关产品推荐

