Как получить 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})
Спасибо, за внимание.