Я пытаюсь разрешить пользователю добавлять комментарии к сообщениям в блоге, которые я делаю ... Когда я запускаю makemigrations и мигрирую, все выглядело нормально. Форма отображается хорошо, но когда я заполняю форму и нажимаю кнопку отправки, появляется следующая ошибка. Django .db.utils.IntegrityError: Ошибка ограничения NOT NULL: blog_comment.author_id
Я новичок в Django и следую руководству. В руководстве нет пользователей, кроме суперпользователя. Я узнал о пользователях и разрешил им зарегистрироваться для использования блога. В руководстве предусмотрено поле имени в форме, чтобы комментатор мог ввести свое имя. Здесь я хочу использовать для этого поля текущего пользователя (см. Мой models.py ниже, чтобы узнать, как я это сделал). Мы будем благодарны за любую помощь в решении этой проблемы.
models.py
class Comment(models.Model):
post = models.ForeignKey(Post, on_delete=models.CASCADE, related_name='comments')
author = models.ForeignKey(get_user_model(), on_delete=models.CASCADE,)
comment = models.TextField()
created = models.DateTimeField(auto_now_add=True)
updated = models.DateTimeField(auto_now=True)
active = models.BooleanField(default=True)
class Meta:
ordering = ('created',)
def __str__(self):
return f'Comment by {self.author} on {self.post}'
forms.py
class CommentForm(forms.ModelForm):
class Meta:
model = Comment
fields = ('comment',)
views.py
login_required
def post_detail(request, post, pk):
post = get_object_or_404(Post, id=pk, slug=post, status='published')
comments = post.comments.filter(active=True)
new_comment = None
if request.method == 'POST':
comment_form = CommentForm(data=request.POST)
if comment_form.is_valid():
new_comment = comment_form.save(commit=False)
new_comment.post = post
new_comment.save()
else:
comment_form = CommentForm()
return render(request,
'post_detail.html',
{'post': post,
'comments': comments,
'new_comment': new_comment,
'comment_form': comment_form})
PS: Я видел похожие вопросы, подобные этому, и удалил свой файл миграции и повторно запустил миграции, но это все еще не сработало.