Как исправить ошибку AttributeError: 'ClassView' object has no attribute 'object'?

У меня есть класс контроллер:

class ProductDetailView(FormMixin, DetailView):
    model = Product
    form_class = ReviewForm

    def post(self, request, *args, **kwargs):

        form = self.get_form()
        if form.is_valid():
            return self.form_valid(form)
        else:
            return self.form_invalid(form)

    def get_success_url(self):
        return reverse('product-detail', kwargs={'slug': self.kwargs['slug']})
    
    def form_valid(self, form):
        review = form.save(commit=False)
        review.product = self.get_object()
        review.save()
        return super().form_valid(form)

    def paginate_reviews(self, number):
        paginator = Paginator(self.object.reviews.all(), number)

        try:
            page_number = paginator.validate_number(self.request.GET.get('page', 1))
        except PageNotAnInteger:
            page_number = 1
        except EmptyPage:
            page_number = paginator.num_pages

        return paginator.page(page_number)

    def get_product_parameters(self):
        parameters = {}
        for option in self.object.options.all().select_related('parameter'):
            parameters.setdefault(option.parameter, []).append((option.id, option.name, option.surcharge))
        return parameters

    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        product = self.object
        context['page_reviews'] = self.paginate_reviews(5)
        context['parameters'] = self.get_product_parameters()
        context['rating'] = round((100 * product.average_rating) / 5)

        return context

Когда я захожу на страницу детального осмотра товара то все хорошо и никаких ошибок нет, что означает(на мой взгляд) что все функции get_context_data корректно и поочередно вызвались в соответствии с наследованием классов python.

Но когда я, например, отправляю форму комментария с некорректными данными, то возникает вышеупомянутая ошибка.

Но почему, я никак не могу понять. Если форма не валидна вызывается метод form_invalid и в нем вызывается render_to_response в котором уже get_context_data. И на мой взгляд все идет по тому же кругу с вызовами get_context_data как и при переходе на страницу.

При этом, во время отправки формы с валидными данными всё хорошо(думаю это из-за того, что там нет вызова get_context_data).

Никак не могу понять в чем проблема...


Ответы (0 шт):