Как исправить ошибку 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).
Никак не могу понять в чем проблема...