0
制作查询集我有一个ListView,它正在制作项目列表,比如产品。我想通过从模板发送参数来有条件地更改此查询集。假设我想过滤supplier_id或类似日期的其他内容。我应该创建一个新的查看每个情况或扩展基本的ListView视病情鲍勃迪伦只有我查询集或者根据传递的参数,我应该只使用一个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方法。
[基于类的视图Django使用查询参数过滤对象的可能重复?](https://stackoverflow.com/questions/31960428/filtering-objects-in-class-based-view-django-using-query-参数) – YPCrumble
是的,但我想知道这是正确的设计standpoing?现在我试图扩展和重写queryset方法每次我需要它,并有每个排序条件单独的URL映射。 – Dmitrii
你是什么意思的一个“单独的URL映射”?从设计角度来看,[接受的答案](https://stackoverflow.com/a/31960938/2532070)在这里是正确的。因此,您的第二种过滤方式是正确的,除非还有其他未提及的内容,这意味着供应商过滤需要自己的子类别视图。 – YPCrumble