python - 如何从Django中的另一个视图继承
问题描述
我正在尝试制作一个简单的网站,用户可以在其中订购食物。所以我有很多方法的视图 - '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”对象没有属性“对象”
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'
好像它以某种方式从 ListView 中丢失了它的“对象”属性。
我在这里想念什么?什么是正确的方法?
解决方案
推荐阅读
- alignment - 如何将按钮定位在 boostrap 4 卡的底部?
- php - 在 VS 代码上运行 PHP
- python-3.x - 通过 URL 访问文件
- python - 在扩展数据帧上获得固定百分位数的更快方法
- ruby-on-rails - 在 Rails 引擎中使用引导 sass 变量时,rake app:assets:precompile 出错
- jira-rest-api - 使用多行值在 JIRA API 中提交请求
- chart.js - “在‘chart.js’中找不到导出‘默认’(导入为‘图表’)
- javascript - 使用 StaticQuery 创建动态导航菜单(包括子菜单!)
- twilio - 在 Twilio 函数之间共享 JavaScript 代码
- reactjs - ERESOLVE 无法解析反应中的依赖树