Как наследовать от другого взгляда в Джанго - PullRequest
0 голосов
/ 25 октября 2019

Я пытаюсь сделать простой сайт, где пользователь может заказать что-нибудь поесть. Итак, у меня есть представление с множеством методов - 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.

Что мне здесь не хватает? Как правильно это сделать?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...