Я пытаюсь сделать простой сайт, где пользователь может заказать что-нибудь поесть. Итак, у меня есть представление с множеством методов - pizza_sizes - это только один из них:
class PizzaOrderView(TemplateView):
template_name = 'pizza/pizza_order.html'
pizza_type = ProductType.objects.filter(name='Regular Pizza').values_list('id', flat=True)[0]
def post(self, request):
to_return = add_to_cart(request)
return to_return
def pizza_sizes(self):
sizes = Product.objects.filter(type=self.pizza_type).values_list('size__name', flat=True).distinct()
return sizes
У меня также есть ListView, отображающий все продукты, которые есть у пользователя в корзине.
class CartView(ListView):
template_name = 'orders/cart.html'
На этой странице пользователь может удалить или обновить продукт. Поэтому я использую UpdateView, чтобы позволить ему обновить его, но опять же мне нужны все эти методы (которые я использую в PizzaOrderView). Я мог бы переписать эти методы для этого представления, но это не имеет особого смысла, я попытался унаследовать его следующим образом:
class ProductUpdateView(UpdateView, PizzaOrderView):
model = CartItem
fields = '__all__'
pizza_type = list(ProductType.objects.filter(name__contains='Pizza').values_list('id', flat=True))
def post(self, request, **kwargs):
cart_id = self.kwargs.get('pk')
to_return = update_user_cart(request, cart_id)
return to_return
def get_template_names(self):
product_type = CartItem.objects.filter(id=self.kwargs.get('pk')).values_list('product__type', flat=True)[0]
if product_type in self.pizza_type:
self.template_name_suffix = '_pizza_update'
else:
self.template_name_suffix = '_form'
return super().get_template_names()
И затем использовать его в моем шаблоне, но затем он выдает AttributeError:
Объект 'ProductUpdateView' не имеет атрибута 'object'
Traceback:
File "C:\Users\jakub.sygowski\Documents\django\CS50\project3\venv\lib\site-packages\django\core\handlers\exception.py" in inner
34. response = get_response(request)
File "C:\Users\jakub.sygowski\Documents\django\CS50\project3\venv\lib\site-packages\django\core\handlers\base.py" in _get_response
115. response = self.process_exception_by_middleware(e, request)
File "C:\Users\jakub.sygowski\Documents\django\CS50\project3\venv\lib\site-packages\django\core\handlers\base.py" in _get_response
113. response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "C:\Users\jakub.sygowski\Documents\django\CS50\project3\venv\lib\site-packages\django\views\generic\base.py" in view
71. return self.dispatch(request, *args, **kwargs)
File "C:\Users\jakub.sygowski\Documents\django\CS50\project3\venv\lib\site-packages\django\views\generic\base.py" in dispatch
97. return handler(request, *args, **kwargs)
File "C:\Users\jakub.sygowski\Documents\django\CS50\project3\venv\lib\site-packages\django\views\generic\base.py" in get
158. context = self.get_context_data(**kwargs)
File "C:\Users\jakub.sygowski\Documents\django\CS50\project3\venv\lib\site-packages\django\views\generic\edit.py" in get_context_data
67. return super().get_context_data(**kwargs)
File "C:\Users\jakub.sygowski\Documents\django\CS50\project3\venv\lib\site-packages\django\views\generic\detail.py" in get_context_data
94. if self.object:
Exception Type: AttributeError at /update/47 Exception Value: 'ProductUpdateView' object has no attribute 'object'
Как будто он каким-то образом потерял свое свойство 'object' из ListView.
Что мне здесь не хватает? Как правильно это сделать?