Django:'NOT NULL constraint failed' 实现评论功能时

Django: 'NOT NULL constraint failed' when implementing comment functionality

我有一个名为 Thoughts 的模型,它有很多评论,所以我定义了一个评论部分,其中包含一个主键到 Thoughts。

from django.db import models

class Thoughts(models.Model):
    name = models.CharField(max_length=30)
    thought = models.CharField(max_length=500)

class Comments(models.Model):
    name = models.CharField(max_length=30)
    comment = models.CharField(max_length=200)
    original_post = models.ForeignKey(Thoughts)

这是我的 forms.py,它定义了一个评论字段:

class CommentForm(forms.Form):
    name = forms.CharField(max_length=30)
    comment = forms.CharField(max_length=500)

    class Meta:
        model = Comments
        fields = ('name','comment',)

处理表单数据的视图:

def thought(request, thought_num):
    if request.method == 'POST':
        form = CommentForm(request.POST)
        if form.is_valid():
            c =Comments.objects.create(name=form.cleaned_data['name'],
                comment=form.cleaned_data['comment'])
            c.save()
    else:
        form = CommentForm()
    return render(request, 'thought.html', {'form': form})

当我尝试在表单中输入值时,出现此错误:

Exception Type: IntegrityError
Exception Value:    
NOT NULL constraint failed: thoughts_comments.original_post_id

我怀疑它与这些行有关:

        c = Comments.objects.create(name=form.cleaned_data['name'],
            comment=form.cleaned_data['comment'])
        c.save()

post 数据在没有这些行的情况下运行良好(只是不会创建评论),所以模型可能有问题?

由于您在创建 Comments 对象时未传递 original_post,因此会引发错误,因为数据库需要 original_post 的非空值。

您需要将 blanknull 参数添加到 Comments 模型中的 original_post 字段。这将允许 Foreignkey 字段 original_post 具有空值。

original_post = models.ForeignKey(Thoughts, blank=True, null=True)

添加这些参数后,您将需要 运行 迁移。