python - 使用 super() 在基于类的视图中覆盖 get 方法
问题描述
我创建了一个视图来管理属于当前登录用户的产品(因此当前用户可以观看自己的产品):
class ProductList(View):
def get(self, request, *args, **kwargs):
products = Product.objects.get(user=self.request.user)
#...
我想从中继承另一个视图,它管理属于在 url 中指定为 GET 参数的用户的产品(可能与当前用户不同)。是否可以使用 super() 并覆盖 product_list 中的方法?像这样的东西:
class ProductListFromUser(ProductList):
def get(self, request, *args, **kwargs):
#not sure what code if necessary to put here...
super().get(self, request, *args, **kwargs):
#or here
#...
基本上,我如何覆盖 product_list 的 get 方法,仅通过从 URL 获取的参数更改“self.request.user”
解决方案
你不应该做这些。
如果您有一个呈现项目列表的视图,则应使用 ListView 的子类。在该视图中,您可以在get_queryset
方法中定义产品列表,您可以在两个不同的视图中以相关方式定义它。
class ProductList(ListView):
def get_queryset(self, *args, **kwargs):
return Product.objects.filter(user=self.request.user)
class ProductListFromUser(ListView):
def get_queryset(self, *args, **kwargs):
return Product.objects.filter(user__username=self.request.GET['user'])
您应该很少需要直接在基于类的视图中定义get
(或)。post
推荐阅读
- javascript - Webpack React - 组件问题
- swiftui - 将关闭键盘添加到 ZStack 时,SwiftUI 选择器停止工作
- java - apache NiFi 1.13.2 ListenWebsocket 不工作
- javascript - 从去抖动函数返回一个值
- oracle - Oracle 进行一对一连接
- flutter-web - 上传到颤振网络时图像已损坏
- azure-data-factory - 时间范围内来自 REST API 的 ADF 请求
- django - 如何在 Django 视图中调用 API
- python - 如何将经纬度坐标字符串分成两列?
- r - 按另一列重新排序因子