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

如何将HTML表单数据插入Django SQLite数据库?

如何将HTML表单数据存入Django SQLite数据库?

我跟着教程操作并在线搜索,但始终无法把HTML表单数据存入Django的SQLite数据库。提交表单后页面刷新,但数据并未添加到数据库里。感谢Tim指出了action="check"的问题,但修改后还是没解决问题。以下是我目前的代码:

HTML代码

<h1>Create a Post </h1>
<form action="check" method="POST">
{% csrf_token %}
    artiest: <input type="text" name="artiest"/><br/>
    song: <br/>
    <textarea cols="35" rows="8" name="song">
    </textarea><br/>
    <button type="submit" value="Post"/> </button>
</form>

views.py代码

def check(request):

    post=Post()
    post.artiest= request.POST.get('artiest')
    post.song= request.POST.get('song')
    post.save()

    return render(request, 'spotifylist/check.html') 

models.py代码

class Post(models.Model):
    artiest = models.CharField(max_length=100)
    song = models.CharField(max_length=100)
    naam = models.CharField(max_length=100)
    link = models.CharField(max_length=100)
    date_posted = models.DateTimeField(auto_now_add=True)

def __str__(self):
    return self.artiest

urls.py代码

urlpatterns= [
re_path('^home/', views.home, name = 'spotifylist-home'),
re_path('help/', views.help, name = 'spotifylist-help'),
re_path('check/', views.check, name = 'spotifylist-check'),
]

首页展示数据的视图代码

def home(request):
context = {
    'posts' : Post.objects.all()
}
return render(request,'spotifylist/home.html', context)

问题排查与解决步骤

  1. 模型必填字段缺失
    你的Post模型中naam和link字段是必填的CharField,但表单里没有对应的输入框,保存时会触发数据库完整性错误,导致数据无法存入。修改模型允许这两个字段为空:

    class Post(models.Model):
        artiest = models.CharField(max_length=100)
        song = models.CharField(max_length=100)
        naam = models.CharField(max_length=100, blank=True, null=True)
        link = models.CharField(max_length=100, blank=True, null=True)
        date_posted = models.DateTimeField(auto_now_add=True)
    
        def __str__(self):
            return self.artiest
    

    修改后执行迁移命令:

    python manage.py makemigrations
    python manage.py migrate
    
  2. 表单路径优化
    避免硬编码表单action路径,用Django模板标签生成正确URL:

    <form action="{% url 'spotifylist-check' %}" method="POST">
    
  3. 视图请求方法判断
    视图应只在POST请求时处理数据,避免GET请求误触发:

    def check(request):
        if request.method == 'POST':
            post = Post()
            post.artiest = request.POST.get('artiest')
            post.song = request.POST.get('song')
            post.naam = ""
            post.link = ""
            post.save()
        return render(request, 'spotifylist/check.html') 
    
  4. 表单按钮语法修正
    原按钮代码有语法错误,修改为:

    <button type="submit">Post</button>
    
  5. 开启调试排查错误
    保持settings.py中DEBUG=True,提交表单后查看控制台或页面报错信息,能快速定位隐藏问题。也可以在视图中添加异常捕获:

    def check(request):
        if request.method == 'POST':
            try:
                post = Post()
                post.artiest = request.POST.get('artiest')
                post.song = request.POST.get('song')
                post.naam = ""
                post.link = ""
                post.save()
            except Exception as e:
                print(e)  # 控制台打印错误信息
        return render(request, 'spotifylist/check.html') 
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 23:25:26