Нулевое значение в столбце нарушает ограничение not-null после некорректного удаления объектов

Помогите, пожалуйста, я не понимаю, что происходит. Я написал простой блог, где можно добавлять посты и комментарии. Все работало хорошо.

views.py:
def add_comment_to_post(request, pk):
post = get_object_or_404(Post, pk=pk) # calls the given model and get the object, type = <class 'blog.models.Post'
if request.method == "POST": # if we posted data
    form = CommentForm(request.POST) 
    if form.is_valid(): # if all fields are filled
        comment = form.save(commit=False) # create instance and return which not saved in database "Comment" <class Comment>
        comment.post = post # return Title
        comment.author = request.user
        comment.save()
        return redirect('post_detail', pk=post.pk)
else:
    form = CommentForm() # type = <class 'blog.forms.CommentForm'>
return render(request, 'blog/add_comment_to_post.html', {'form': form})

Но когда я добавил функцию для удаления комментариев, то мне пишет ошибку, вот так:

null значение в столбце "одобренный_коммент" отношения "блог_коммент" нарушает ограничение not-null

views.py:
def comment_remove(request, pk):
 post = get_object_or_404(Post, pk=pk)
 comment = get_object_or_404(Comment, pk=pk)
 print(comment)
 comment.delete()
 return redirect('post_detail', pk=post.pk)

По-моему, я неправильно удалил комментарий. Я не понимаю, как работают первичные ключи, как связаны между собой комментарии и посты. И я не понимаю, как это понять.

Чтобы понять, как удалять комментарии, нам нужно понять, как работает pk (первичные ключи) и related_name.

Рассмотрим модель класса Comment. Обратите внимание на post и related_name='comments', а затем посмотрите его в post_detail.html.

.
class Comment(models.Model):
    post = models.ForeignKey('blog.Post', on_delete=models.CASCADE, 
related_name='comments')
    author = models.CharField(max_length=200)
    text = models.TextField()
    created_date = models.DateTimeField(default=timezone.now)
    approved_comment = models.BooleanField(default=False)

post_detail.html:

<a class="btn btn-default" href="{% url 'add_comment_to_post' pk=post.pk %}">Add comment</a>
    {% for comment in post.comments.all %}
        <div class="comment">
            <a class="btn btn-default" href="{% url 'comment_remove' pk=comment.pk %}"><span class="glyphicon glyphicon-remove"></span></a>
            <div class="date">{{ comment.created_date }}</div>
            <strong>{{ comment.author }}</strong>
            <p>{{ comment.text|linebreaks }}</p>
        </div>
    {% empty %}
        <p>No comments here yet :(</p>
    {% endfor %}

post.comments.all - post является отношением для модели нашей модели Post. Имя related_name указывает имя отношения в обратном порядке, так что в данном случае доступ к комментариям данного объекта Post. [https://docs.djangoproject.com/en/dev/ref/models/fields/#django.db.models.ForeignKey.related_name]. Теперь вы знаете, как мы получаем comment.pk.

.

После этого, пожалуйста, обратите внимание, как мы удаляем комментарий. views.py:

def comment_remove(request, pk):
    comment = get_object_or_404(Comment, pk=pk)
    comment.delete()
    return redirect('post_detail', pk=comment.post.pk)

Посмотрите на comment.post.pk. В нашей модели Comment у нас есть ключ post = models.ForeignKey('blog.Post', on_delete=models.CASCADE, related_name='comments'), который связан с нашей моделью Post. Вот и все!

Вернуться на верх