如何解决NOT NULL约束失败:social_media_app_blogcomment.user_id
我正在为我的博客创建此评论系统。我已经制作了模型,ModelForm和用于显示评论和博客的视图。我真的很困惑如何保存与特定博客相关的评论。我试图用视图保存评论,但遇到了IntegrityError。会有所帮助。
这是我的views.py:
@login_required #View to show the blogs and comments related to it
def readblog(request,blog_pk):
Blog = get_object_or_404(blog,pk=blog_pk)
return render(request,'social_media/readblog.html',{'Blog':Blog,'Form':CommentForm()})
@login_required #view to save the comments
def commentblog(request,pk=blog_pk)
if request.method == 'POST':
form = CommentForm(request.POST)
if form.is_valid():
Form = form.save(commit=False)
Form.Blog = Blog
Form.save()
return redirect('usersfeed')
Urls.py:
path('commentblog/<int:blog_pk>',views.commentblog,name='commentblog'),path('readblog/<int:blog_pk>',views.readblog,name='readblog'),
用于撰写和保存评论的HTML页面(以及博客):
{{ Blog.title }}
<br>
{{ Blog.text }}
<br>
{% if Blog.image %}
<img src="{{ Blog.image.url }}" alt="">
{% endif %}
<br>
<form action="{% url 'commentblog' Blog.id %}" method="post">
{% csrf_token %}
{{ Form.as_p }}
<button type="submit">Comment!</button>
</form>
{% for i in Blog.BlogComment.all %}
{{ i.comment }}
<b>user:{{ i.user }}</b>
<br>
{% endfor %}
评论模型:
class BlogComment(models.Model): # --run-syncdb <- (Research about this!)
user = models.ForeignKey(User,on_delete=models.CASCADE)
comment = models.CharField(max_length=250,null=True)
blog = models.ForeignKey(blog,related_name='BlogComment',on_delete=models.CASCADE,blank=True,null=True)
def __str__(self):
return self.comment
Forms.py:
class CommentForm(forms.ModelForm):
class Meta:
model = BlogComment
fields = ['comment']
解决方法
您需要添加用户,因为它不是模型中的空字段:
def commentblog(request,blog_pk):
blog_obj = get_object_or_404(blog,pk=blog_pk)
if request.method == 'POST':
form = CommentForm(request.POST)
if form.is_valid():
form_obj = form.save(commit=False)
form_obj.blog = blog_obj
# add user instance
form_obj.user = request.user
form_obj.save()
return redirect('usersfeed')
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。