HTML表单数据未保存在数据库中 - django

Posted

技术标签:

【中文标题】HTML表单数据未保存在数据库中 - django【英文标题】:HTML form data not saved in database - django 【发布时间】:2020-10-07 14:55:15 【问题描述】:

我可以从 html 中获取数据,但它不会保存到数据库中,我该怎么办? 它工作正常,唯一的问题是它不会被保存

views.py

def comment(request , newsId):
cm = get_object_or_404(models.News , id= newsId)
print("news = " + newsId)

if request.method == 'POST' :
    cm.comments_set.text = request.POST.get('comment_text')
    cm.comments_set.name = request.POST.get('comment_name')
    cm.save()


return HttpResponseRedirect(reverse('details', args=(cm.id,)))

urls.py

urlpatterns = [
   path('', views.test),
   path('details/<newsId>', views.details, name="details"),
   path('comment/<newsId>' , views.comment ,name="comment")]

models.py

class News(models.Model):
    title = models.CharField(max_length=300)
    author = models.CharField(max_length=100)
    date = models.DateTimeField()
    description = models.TextField()
    like = models.IntegerField(default=0)
    img = models.CharField(max_length=100)

    def __str__(self):
        return self.title


class Comments(models.Model):
    news = models.ForeignKey(News, on_delete=models.CASCADE)
    name = models.CharField(max_length=100)
    text = models.TextField()

    def __str__(self):
        return self.name

html表单

<form action="% url 'comment' newsKey.id %" method="POST">
     % csrf_token %
     <textarea name="comment_text" id="comment_text_id"  cols="30" rows="10" placeholder="Write your here comment here"></textarea>
     <input type="text" name="coment_name" id="comment_name_id"  placeholder="Type full name"/>
     <button type="submit" value="comment_submit"> SUBMMIT </button>
</form>

【问题讨论】:

【参考方案1】:

您在这里所做的是在 comments_set 上设置一些随机属性后保存原始的 News 对象(不是 Comment)。

基本上你是在拍摄空白:)

# fix this part. 
news_article = get_object_or_404(models.News, id=newsId)

comment = models.Comment(
    name=request.POST.get('comment_name' , ''), 
    text=request.POST.get('comment_text',''),
    news=news_article 
)

comment.save()

comment_set 用于选择给定News 文章的所有相关cmets。

看到这个django tutorial。

上面的内容也可以通过使用create 方法来缩短,如下所示:

models.Comment.objects.create(
    name=request.POST['comment_name'], 
    text=request.POST['comment_text'],
    news=news_article 
)

这个方法也保存到数据库中。

【讨论】:

以上是关于HTML表单数据未保存在数据库中 - django的主要内容,如果未能解决你的问题,请参考以下文章

页面未在 django 中保存表单数据

Django表单数据未保存到数据库

Django绑定表单无效,但未引发ValidationError

Django With MSSQL using Pyodbc:未保存模型表单

Django,模型表格未在数据库中保存数据

将html表单中的数据插入sql数据库(html,php,sql)时未保存输入的值