Как получить id создаваемого комментария при его сохранении в БД

Буду рад любой информации и советам для новичка.

Пишу простой блог для изучения Django. Имеется модель Post для создания записей в блоге. К записям можно оставлять комментарии и для этого есть модель Comment. Я ещё не разобрался с серьезными решениями для построения вложенных деревьев, поэтому решил "изобрести свой кривой велосипед".

Суть проблемы следующая: три уровня комментариев. Запись в parent для комментария проходит успешно и я могу сделать двухуровневый вывод, но решив сделать третий уровень я добавил поле child, однако не понимаю как при вызове функции для заполнения ответа на комментарий - получить id нового сохраняемого комментария чтобы записать его в child для родителя.

Модель Comment:

class Comment(models.Model):
    post = models.ForeignKey('Post', related_name='comments', on_delete=models.CASCADE, verbose_name='Запись')
    name = models.ForeignKey(User, on_delete=models.CASCADE, verbose_name='Комментатор')
    text = models.TextField()
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)
    active = models.BooleanField(default=True)
    likes = models.ManyToManyField(User, related_name='comment_likes', verbose_name='Лайк')
    dislikes = models.ManyToManyField(User, related_name='comment_dislikes', verbose_name='Дизлайк')
    parent = models.ForeignKey('self', verbose_name="Родитель", on_delete=models.CASCADE, blank=True, null=True)
    child = models.ForeignKey('self', related_name='comment_child', verbose_name="Потомок", on_delete=models.SET_NULL, blank=True, null=True)

Views создания ответа на комментарий:

def add_comment_reply(request, slug, id):
    post = get_object_or_404(Post, slug=slug)
    comment = get_object_or_404(Comment, id=id)
    if request.method == 'POST':
        data = request.POST.copy()
        data.update({'name': request.user, 'post': post, 'parent': comment.id})
        form = CommentReplyForm(data)
        if form.is_valid():
            form.save()
            return HttpResponseRedirect(reverse('post', args=[str(slug)]))
        else:
            messages.error(request, 'Форма не прошла проверку!')
    else:
        form = CommentReplyForm(instance=comment.name)
    return render(request, 'blog/add_comment_reply.html', {'form': form, 'name': comment.name, 'post': post})

Спасибо, за внимание.

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