Comment Mixin для Django. Почему CommentPost определен именно так?

Я начинающий Django, и я читал книгу WS Vincent "Django для начинающих". В предпоследней главе он пишет следующий код. Он создает представление для комментариев, которое может обрабатывать GET и POST запросы, не смешивая FormMixin и созданный им ArticleDetailView. Я все это понимаю, но я не понимаю, почему это было построено именно так? Может ли кто-нибудь объяснить, что такое self.object и self.get_object в этом примере? Также, почему мы сохраняем дважды во втором методе? Спасибо!:

 def post(self, request, *args, **kwargs):
        self.object = self.get_object()
        return super().post(request, *args, **kwargs)

    def form_valid(self, form):
        comment = form.save(commit=False)
        comment.article = self.object
        comment.save()
        return super().form_valid(form)

    def get_success_url(self):
        article = self.get_object()
        return reverse("article_detail", kwargs={"pk": article.pk})  

У меня нет книги, но get_object вернет объект, который отображает данное представление. В вашем примере представление, вероятно, настроено на отображение одного Article, но форма публикует данные для Comment. Вы используете метод get_object для получения доступа к экземпляру Article, чтобы можно было связать с ним Comment.

Второй вопрос: Он не сохраняет дважды. Это может быть непонятно, но когда вы устанавливаете commit на False, он инстанцирует объект, но не сохраняет его. Вы делаете это, когда хотите добавить дополнительную информацию после инстанцирования экземпляра модели. На самом деле она сохраняется в базе данных после вызова comment.save().

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