【问题标题】:NOT NULL constraint failed: social_media_app_blogcomment.user_idNOT NULL 约束失败:social_media_app_blogcomment.user_id
【发布时间】:2020-12-18 02:35:06
【问题描述】:

我正在为我的博客制作这个评论系统。我已经制作了模型、ModelForm 和视图来显示 cmets 和博客。我真的很困惑如何保存与特定博客相关的 cmets。我试图用视图保存 cmets,但我遇到了 IntegrityError。一点帮助将不胜感激。

这是我的意见.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,blog_pk):
    Blog = get_object_or_404(blog,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')

网址.py:

path('commentblog/<int:blog_pk>', views.commentblog, name='commentblog'),
path('readblog/<int:blog_pk>', views.readblog, name='readblog'),

用于编写和保存 cmets 的 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']

【问题讨论】:

  • 请发布您的模型和您的模型表格。

标签: django django-forms django-views comments notnull


【解决方案1】:

您需要添加用户,因为它是模型中的非空字段:

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')

【讨论】:

  • 哦,好吧!但是有什么我可以告诉 django 这个特定的评论与这个特定的博客有关吗?
  • Form.blog = Blog。注意小写的“b”。另外,您可能应该阅读以下内容:python.org/dev/peps/pep-0008
猜你喜欢
  • 2015-04-22
  • 2018-08-24
  • 2022-01-19
  • 2021-11-16
  • 2021-03-20
  • 2020-02-11
  • 2019-02-13
  • 2017-12-31
  • 2019-05-06
相关资源
最近更新 更多