我有一个ListView,它列出了商品,比如产品。我想通过从模板发送参数来有条件地更改此查询集。假设我想过滤supplier_id或其他类似日期的东西。我应该为每种情况创建一个新视图,还是只根据条件扩展基本ListView changin我的查询集,或者我应该只使用一个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?中所说的所有内容,但这是一个好的设计,或者我应该更喜欢别的东西,比如前面提到的扩展和重写查询集方法。
答案 0 :(得分:0)
很难说哪一个更好但两种方法都有效。无论如何,最后我终于找到了一个更好的方法 - 使用django-filters,根据标准进行过滤。