Как устранить ошибку IntegrityError: NOT NULL, ограничивающую ошибку? - PullRequest
0 голосов
/ 28 мая 2020

Я пытаюсь разрешить пользователю добавлять комментарии к сообщениям в блоге, которые я делаю ... Когда я запускаю 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: Я видел похожие вопросы, подобные этому, и удалил свой файл миграции и повторно запустил миграции, но это все еще не сработало.

1 Ответ

0 голосов
/ 28 мая 2020

В блоке if comment.is_valid()::

До;

new_comment.save()

Добавить,

new_comment.author = request.user
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...