如何将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)
问题排查与解决步骤
模型必填字段缺失
你的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表单路径优化
避免硬编码表单action路径,用Django模板标签生成正确URL:<form action="{% url 'spotifylist-check' %}" method="POST">视图请求方法判断
视图应只在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')表单按钮语法修正
原按钮代码有语法错误,修改为:<button type="submit">Post</button>开启调试排查错误
保持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
相关产品推荐
相关产品推荐

