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
的非空值。
您需要将 blank
和 null
参数添加到 Comments
模型中的 original_post
字段。这将允许 Foreignkey
字段 original_post
具有空值。
original_post = models.ForeignKey(Thoughts, blank=True, null=True)
添加这些参数后,您将需要 运行 迁移。
我有一个名为 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
的非空值。
您需要将 blank
和 null
参数添加到 Comments
模型中的 original_post
字段。这将允许 Foreignkey
字段 original_post
具有空值。
original_post = models.ForeignKey(Thoughts, blank=True, null=True)
添加这些参数后,您将需要 运行 迁移。