ListView基于参数制作查询集

时间:2017-10-20 14:30:40

标签: django

我有一个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?中所说的所有内容,但这是一个好的设计,或者我应该更喜欢别的东西,比如前面提到的扩展和重写查询集方法。

1 个答案:

答案 0 :(得分:0)

很难说哪一个更好但两种方法都有效。无论如何,最后我终于找到了一个更好的方法 - 使用django-filters,根据标准进行过滤。