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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 19:08:00