我有一个列表视图,它是一个项目列表,比如说,产品。我想通过从模板发送一个参数来有条件地更改这个查询集。假设我想过滤供应商id或其他类似日期的内容。我应该为每种情况创建一个新视图,还是根据条件仅在查询集中扩展基本ListView,或者我应该仅使用一个ListView并根据传递的参数处理每种情况,所以
class ProductListView(ListView):
...
def get_queryset(self):
return Supplier.objects.all()
class ProductBySupplierListView(ProductListView):
def get_queryset(self):
return Supplier.objects.filter(supplier=self.kwargs['sup'])
或
class ProductListView(ListView):
...
def get_queryset(self):
if self.kwargs['sup']:
return Supplier.objects.filter(supplier=sup)
else:
return Supplier.objects.all().annotate(prd_cnt=Count('product'))
或者可能有一些更好的模式来处理多条件排序问题。
我知道我可以做任何事情
Filtering Objects in Class based view Django using Query parameters?
但这是一个好的设计还是我更喜欢其他东西,比如前面提到的扩展和重写queryset方法。